播放器仅在ACTION_DOWN或ACTIONMOVE中的屏幕触摸时需要移动时移动

时间:2012-12-07 23:28:38

标签: java android ontouchlistener motionevent

好的,我创建了一个ontouchlistener类:

package drop.out.Game;

import android.view.MotionEvent;

import android.view.View;

import drop.out.Game.Model.Player;

public final class TrackingTouchListener 

 implements View.OnTouchListener{

//player class
private final Player mplayer;
Player plyr;

//constructor bringing in the player
TrackingTouchListener(Player plyr){mplayer = plyr;}

    //on touch stuff
     public boolean onTouch(View v, MotionEvent evt) {

         /**@if touching/moving on the left side of screen */
         if(MotionEvent.ACTION_DOWN== evt.getAction() && evt.getX() < (v.getWidth()/2) || MotionEvent.ACTION_MOVE== evt.getAction() && evt.getX() <(v.getWidth()/2)){
             moveL(mplayer);
         }
         /**@if touching/moving on the right side of the screen */
         if(MotionEvent.ACTION_DOWN== evt.getAction() && evt.getX() > (v.getWidth()/2) || MotionEvent.ACTION_MOVE== evt.getAction() && evt.getX() >(v.getWidth()/2)){
             moveR(mplayer);
         } 

         return true; 
     }

     //call functions in the player class that moves the player x by -1
     private void moveL(Player player){
         player.moveL();
         //e.g. player_x -=10;
     }

     private void moveR(Player player){
         player.moveR();  
         //e.g.player_x +=10;
     }

}

不幸的是,只有在按下或拖过屏幕时才更新player_x,我希望当手指在屏幕的以太侧时让它移动。 有什么想法吗?

2 个答案:

答案 0 :(得分:0)

如果您没有移动手指,则会停止更新。

您应该设置一个类似move的布尔标志,而不是从TouchListener调用shouldMove,然后在shouldMove为真时以固定间隔发出移动命令。

然后,即使您停止接收触摸事件,您的角色也会继续移动。只需在抬起手指或移出某个区域时清除此布尔值即可。

答案 1 :(得分:0)

你也可以在touchlistener上设置一个x值,然后检查它的位置,以确定主循环中的左边或右边(就像你在触摸监听器内),并在手指抬起时将其设置为0

编辑:所以

if(MotionEvent.ACTION_DOWN== evt.getAction()  || MotionEvent.ACTION_MOVE== evt.getAction()) 
{
    moveX = evt.getX();
}

然后检查moveX 并将moveX设置为0;在MotionEvent.ACTION_UP上