機能する Android ゲームのプログラミングは完了しましたが、タッチ ラグを修正する方法がわかりません。画面に触れるたびに、フレームレートが半分に低下します。私のコードは、基本的に onTouchEvent を使用した LunarLander のコピー アンド ペーストです。
Google の検索では、機能するが機能しないという基本的な回避策 (onTouchEvent、onDispatchEvent、onInterceptTouchEvent、同期などのスリープ) が表示されます。
私は何をすべきか?SurfaceView を放棄し、onTouchEvent を無効にし、clickListener を使用して、何らかの方法で迅速なタッチ呼び出しをブロックする必要がありますか? 何が悪いのか教えてください!
私はもう試した:
- onTouchEvent() でコードを実行せずに false を返すようにする
- onTouchEvent() または run() を 16/32/1000 ミリ秒間スリープさせても、違いはありません
- onTouchEvent() の代わりに onDispatchevent() をオーバーライドする
- onTouchEvent() での synchronized() の実験
そして、ここに私のコードがあります:
public class Surface extends SurfaceView implements SurfaceHolder.Callback {
public CanvasThread canvasThread;
private SurfaceHolder surfaceHolder;
public Surface(Context context) {
super(context);
surfaceHolder = getHolder();
surfaceHolder.addCallback(this);
setFocusable(true);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return canvasThread.touch(event);
}
class CanvasThread extends Thread {
@Override
public void run() {
synchronized (this) {
// game logic
}
}
public boolean touch(MotionEvent event) {
// touch logic
}
}
}