首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使图像(可绘制)跟随我的手指?

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

Stack Overflow用户
提问于 2015-12-29 10:12:41
回答 1查看 160关注 0票数 0

我有一个扩展SurfaceView的类。到目前为止,我拥有的代码让玩家跟随我的手指,但它也允许玩家“传送”到手指所指向的任何地方,而我不想这样。

代码语言:javascript
复制
@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()方法:

代码语言:javascript
复制
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));

    }
EN

回答 1

Stack Overflow用户

发布于 2015-12-29 11:24:48

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

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34503492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档