如何使图像(可绘制)跟随我的手指



我有一个扩展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);
    }

以下是播放器类中的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));
    }

不要"直接"将手指输入转换为移动事物的"逻辑"。

您应该让onTouchEvent方法读取手指按压位置的X和Y值,然后将其传递给某些逻辑。然后,该逻辑应该决定是否应该将该信息传递给新方法moveCharacterTo(x,y)

我上面提到的"逻辑"可能是几件事,你可以使用策略模式来决定应该使用什么"策略/策略(算法)"来处理屏幕。或者,你可以只使用一个带有方法的类来比较触摸事件,看看它们是否"接近"角色,然后做出相应的反应。

最新更新