Java 玩家只在屏幕向下移动或触摸ACTIONMOVE需要移动时移动
ok to我创建了一个ontouchlistener类: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
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