2013-10-14 71 views
2

我想提出一個月球着陸器遊戲,我的任務執行的語句不會繼續ACTION_DOWN

我有一個按鈕,當按鈕是onTouchListener設置爲它(不是的onClick) 向下或ACTION_DOWN火箭飛行並在ACTION_UP上停止加速。

目前它只在ACTION_DOWN上執行一次,因此它的行爲類似於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; 
        } 
    }); 
    
+0

你確定'else if'部分沒有執行嗎?你有沒有嘗試在裏面放一個'Log'並檢查? – Nizam

+0

是的其他如果執行,因爲當我放開按鈕(ACTION_UP)正在使用的聲音效果停止。 –

回答

2

文檔使這相當清楚:

在指向與源類SOURCE_CLASS_POINTER設備,諸如觸摸屏,鼠標指針座標指定絕對位置如圖X/Y座標。每個完整的手勢由一系列動作事件表示,其中動作描述指針狀態轉換和移動。一個手勢以一個ACTION_DOWN運動事件開始,它提供了第一個指針的位置。隨着每個額外的指針向下或向上,框架將相應地生成ACTION_POINTER_DOWN或ACTION_POINTER_UP的運動事件。指針運動用ACTION_MOVE通過運動事件來描述。最後,當最終的指針上升時,手勢結束,如ACTION_UP的動作事件表示或手勢被ACTION_CANCEL取消。

所以,你應該期望得到一個ACTION_DOWN事件,其次是多ACTION_MOVE事件。這聽起來像基本上你需要回應ACTION_MOVE以及如果你想處理動作,並且如果你想要做的事情連續而觸摸發生,你可能想要某種計時器事件(因爲你不會產生新的運動事件 - 沒有動作參與只是觸摸和持有)。

+0

好吧,如果我正確理解這一點,將不會有重複或循環的ACTION_DOWN事件,因爲它只是一個事件發生一次,而不是重複WHILE ACTION_DOWN的事件。所以爲了解決這個問題,我可以設置一個定時器處理程序 –

+0

@ChrisHill:是的,我相信是這樣。 –