2

課題で月面着陸ゲームを作っています

ボタンがあり、ボタンが押されているか ACTION_DOWN のときに onTouchListener を (onClick ではなく) 設定し、ロケットが上昇して ACTION_UP で加速を停止します。

現在、これは ACTION_DOWN で 1 回だけ実行されているため、onClick ボタンのように動作しています。

任意の助けをいただければ幸いです

  • gView は、すべての魔法が発生するゲーム クラスのインスタンスです。
  • gView.mainThruster() は、宇宙船を上向きに飛ばすゲーム クラスのメソッドを呼び出します。例: Y -= 10;

    mThrust = (Button) findViewById(R.id.mainThrustBtn);    
    mThrust.setOnTouchListener(new OnTouchListener(){
    @Override
    public boolean onTouch(View v, MotionEvent event) {
    
        if(event.getAction() == MotionEvent.ACTION_DOWN) {
            if(fuel > 0){
    
                  gView.checkFuel(fuel);
              gView.mainThruster();
              mThrustSound.start();
              fuel -= 0.5;
              fuelGauge.setProgress((int)fuel);
              }
         }
         else if(event.getAction() == MotionEvent.ACTION_UP){
    
            mThrustSound.pause();
            //mThrustSound.release();   
         }
         else{
            //do nothing
         }
            return true;
         }
     });
    
4

1 に答える 1

2

ドキュメントはこれを合理的に明確にしています:

タッチ スクリーンなどのソース クラス SOURCE_CLASS_POINTER を持つポインティング デバイスでは、ポインター座標はビューの X/Y 座標などの絶対位置を指定します。それぞれの完全なジェスチャは、一連のモーション イベントと、ポインターの状態遷移と動きを表すアクションによって表されます。ジェスチャは、最初のポインターが押された位置を提供する ACTION_DOWN のモーション イベントで始まります。追加のポインターが上下するたびに、フレームワークはそれに応じて ACTION_POINTER_DOWN または ACTION_POINTER_UP でモーション イベントを生成します。ポインターの動きは、ACTION_MOVE を使用したモーション イベントによって記述されます。最後に、ACTION_UP のモーション イベントによって表されるように最後のポインターが上がるか、ACTION_CANCEL でジェスチャがキャンセルされると、ジェスチャが終了します。

したがって、単一のイベントの後に複数のイベントが続くことを期待する必要があります。動きを処理したい場合は、基本的に応答する必要があるように思えます。また、タッチが行われている間に何かを継続的に実行したい場合は、何らかのタイマーイベントが必要になる可能性があります (新しいモーションを生成しないため)。イベント -触れて保持するだけでは動きはありません)。ACTION_DOWNACTION_MOVEACTION_MOVE

于 2013-10-14T06:22:51.170 に答える