0

好的,我创建了一个 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 仅在屏幕被按下或拖过时才会更新,我希望当手指在屏幕的以太一侧时它会移动。有任何想法吗?

4

2 回答 2

0

如果您不移动手指,您将停止获取更新。

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

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

于 2012-12-07T23:33:18.280 回答
0

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

编辑:所以

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

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

于 2012-12-07T23:39:30.580 回答