我有一个扩展SurfaceView的类。到目前为止,我拥有的代码让玩家跟随我的手指,但它也允许玩家“传送”到手指所指向的任何地方,而我不想这样。
@Override
public boolean onTouchEvent(MotionEvent event) {
pointerX = (int)event.getX();
pointerY = (int)event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
if (!player.getPlaying()) {
player.setPlaying(true);
}
if (!player.playerAlive) {
if ((pointerX >= rescaleX(600) && pointerX <= rescaleX(842)) && (pointerY >= rescaleY(900) && pointerY <= rescaleY(1142))) {
//newGame();
player.setX(600);
player.setY(900);
}
}
if (player.playerAlive) {
// player.move(true);
}
break;
case MotionEvent.ACTION_MOVE:
if (!player.getPlaying()){
player.setPlaying(true);
player.move(true);
} else {
player.move(true);
}
break;
case MotionEvent.ACTION_UP:
//player.move(true);
if (!player.playerAlive) {
if ((pointerX >= rescaleX(600) && pointerX <= rescaleX(842)) && (pointerY >= rescaleY(900) && pointerY <= rescaleY(1142))) {
newGame();
player.setX(600);
player.setY(900);
}
}
break;
}
return true;
//return super.onTouchEvent(event);
}下面是player类中的move()方法:
public void move(boolean b) {
if(b){
if((GamePanel.pointerX * GamePanel.WIDTH / MainActivity.dispX) - 141 >= 1380 - getWidth()){setX(1380-getWidth());}
if((GamePanel.pointerY * GamePanel.HEIGHT / MainActivity.dispY) - 141 >= 1880 - getHeight()){setY(1880 - getHeight());}
setX((int) ((GamePanel.pointerX * GamePanel.WIDTH / MainActivity.dispX) - 141));
setY((int) ((GamePanel.pointerY * GamePanel.HEIGHT / MainActivity.dispY) - 141));
}发布于 2015-12-29 11:24:48
不要“直接”将手指输入转换为用于移动物体的“逻辑”。
您应该让onTouchEvent方法读取手指按压位置的X和Y值,然后将其传递给某个逻辑。然后,该逻辑应决定是否应将该信息传递给新方法moveCharacterTo(x,y)
我上面提到的“逻辑”可以是几件事,你可以使用策略模式来决定应该使用什么“策略/策略(算法)”来处理屏幕。或者你可以只有一个带有方法的类,用来比较触摸事件,看看它们是否‘接近’角色,然后做出相应的反应。
https://stackoverflow.com/questions/34503492
复制相似问题