Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 玩家只在屏幕向下移动或触摸ACTIONMOVE需要移动时移动_Java_Android_Ontouchlistener_Motionevent - Fatal编程技术网

Java 玩家只在屏幕向下移动或触摸ACTIONMOVE需要移动时移动

Java 玩家只在屏幕向下移动或触摸ACTIONMOVE需要移动时移动,java,android,ontouchlistener,motionevent,Java,Android,Ontouchlistener,Motionevent,ok to我创建了一个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

ok to我创建了一个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;
     }

}
package drop.out.Game;
导入android.view.MotionEvent;
导入android.view.view;
导入drop.out.Game.Model.Player;
公共最终类跟踪TouchListener
实现View.OnTouchListener{
//球员级别
私人决赛选手;
玩家plyr;
//把玩家带进来
TrackingTouchListener(Player plyr){mplayer=plyr;}
//触摸屏上的东西
公共布尔onTouch(视图v、运动事件evt){
/**@如果触摸/移动屏幕左侧*/
如果(MotionEvent.ACTION_DOWN==evt.getAction()&&evt.getX()<(v.getWidth()/2)| | MotionEvent.ACTION_MOVE==evt.getAction()&&evt.getX()(v.getWidth()/2)| MotionEvent.ACTION|MOVE==evt.getAction()&&evt.getX()>(v.getWidth()/2)){
移动器(mplayer);
} 
返回true;
}
//调用将玩家x移动-1的玩家类中的函数
私人虚空移动(玩家){
player.moveL();
//e、 g.玩家_x-=10;
}
专用空位移动器(玩家){
player.moveR();
//e、 g.player_x+=10;
}
}
不幸的是,只有当屏幕被按下或拖动时,播放器才被更新,我希望当手指在屏幕的另一侧时,它会被移动。
有什么想法吗?

如果你不动手指,你将停止获取更新

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


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

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

编辑:那么

if(MotionEvent.ACTION_DOWN== evt.getAction()  || MotionEvent.ACTION_MOVE== evt.getAction()) 
{
    moveX = evt.getX();
}
然后稍后检查moveX 并将moveX设置为0;关于MotionEvent.ACTION\u UP