【问题标题】:How do I make an image(drawable) follow my finger?如何使图像(可绘制)跟随我的手指?
【发布时间】:2015-12-29 02:12:40
【问题描述】:

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

    }

【问题讨论】:

    标签: java android android-studio touch-event motionevent


    【解决方案1】:

    不要“直接”将手指输入转换为移动物体的“逻辑”。

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

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

    【讨论】:

    • 这不是我已经在做的吗?我在播放器中使用 move 方法来移动。但是您提到的似乎是为了组织起见,当我只在 MOVE MotionEvent 应该触发时调用 move 方法时,我似乎无法弄清楚为什么当手指从玩家身上轻敲时玩家会一直“传送”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多