2

我正在为我的任务制作月球着陆器游戏

我有一个按钮并在按钮按下或 ACTION_DOWN 时为它设置一个 onTouchListener(不是 onClick),火箭飞起来并在 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;
         }
     });
    
4

1 回答 1

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做某事,你可能需要某种计时器事件(因为你不会产生新的动作事件 -仅触摸和保持不涉及任何动作)。

于 2013-10-14T06:22:51.170 回答