「タップを視覚表示する」について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
MitiMinish
記事: 12
登録日時: 10年前

「タップを視覚表示する」について

#1

投稿記事 by MitiMinish » 10年前

こんにちは、MitiMinishと申します。
androidの館を見ながら、ゲームを作ろうと思っています。
今作ったテストアプリが
タッチしたところに円を書くというものなのですが、
「タッチを視覚表示」と書いてあるものよりも遅れて表示されているように見えます。
タッチしながら早く動かすと白い丸と黒い丸がずれて見えます。
これは仕方のないことなのでしょうか?
直し方があったら教えてください。
//MainActivity.java

コード:

import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.Window;
import android.view.WindowManager;

public class MainActivity extends Activity {
	
	GameSurfaceView view;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);//フルスクリーンに設定
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        view=new GameSurfaceView(this);
        setContentView(view);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
    	float x=event.getX();
    	float y=event.getY();
    	view.setXY(x, y);
    	return super.onTouchEvent(event);
    }
}
//GameSurfaceView.java

コード:


import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class GameSurfaceView extends SurfaceView implements SurfaceHolder.Callback,Runnable{

	Thread thread;
	Paint paint=new Paint();
	final int TEXT_SIZE=20;
	public GameSurfaceView(Context context) {
		super(context);
		getHolder().addCallback(this);
		paint.setTextSize(TEXT_SIZE);
	}

	@Override
	public void run() {
		// TODO 自動生成されたメソッド・スタブ
		while(thread!=null){
			myDraw(getHolder());
		}
	}
	
	@Override
	public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {}

	@Override
	public void surfaceCreated(SurfaceHolder holder) {
		thread=new Thread(this);
		thread.start();
	}

	@Override
	public void surfaceDestroyed(SurfaceHolder holder) {
		thread=null;
	}

	private void myDraw(SurfaceHolder holder){
		Canvas canvas=holder.lockCanvas();
		if(canvas==null){
			return;
		}
		canvas.drawColor(Color.BLUE);
		canvas.drawCircle(x, y, 16, paint);
		holder.unlockCanvasAndPost(canvas);
	}
	private float x,y;
	public void setXY(float x,float y){
		this.x=x;
		this.y=y;
	}
}


“C言語何でも質問掲示板” へ戻る