如何按照我的手指制作图像(可绘制)?

时间:2015-12-29 02:12:41

标签: java android android-studio ontouchevent motionevent

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

    }

1 个答案:

答案 0 :(得分:0)

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

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

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