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);
}
}
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;
}
}