在屏幕上拖动对象而不是一直拖动

时间:2018-04-02 06:23:19

标签: android

我在Android Studio中处理应用程序,我在屏幕上拖动一个块,但由于某种原因,拖动功能无法正常运行。

这里应该是什么样的:Video

这就是我的样子:Video

出于某种原因,我的拖动似乎只是拖动光标距离的一半。我不确定为什么会这样,因为我完全按照教程中的代码,但我希望有人能指出我正确的方向做出这个修复。以下是我认为需要以某种方式调整的课程代码:

public class GamePanel extends SurfaceView implements SurfaceHolder.Callback {
private MainThread thread;
private RectPlayer player;
private Point playerPoint;
private ObstacleManager obstacleManager;

public GamePanel(Context context) {
    super(context);
    getHolder().addCallback(this);

    thread = new MainThread(getHolder(), this);

    player = new RectPlayer(new Rect(100,100,200,200), Color.rgb(255,0,0));
    playerPoint = new Point(Constants.SCREEN_WIDTH, Constants.SCREEN_HEIGHT);

    obstacleManager = new ObstacleManager(200, 350, 75, Color.BLACK);

    setFocusable(true);
}
@Override
public void surfaceChanged(SurfaceHolder surfaceHolder, int format, int width, int height) {

}

@Override
public void surfaceCreated(SurfaceHolder holder){
    thread = new MainThread(getHolder(), this);
    thread.setRunning(true);
    thread.start();
}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
    boolean retry = true;
    try{
        thread.setRunning(false);
        thread.join();
    } catch(Exception e) {
        e.printStackTrace();
    }
    retry = false;
}

@Override
public boolean onTouchEvent(MotionEvent event) {

    switch(event.getAction()) {
        case MotionEvent.ACTION_DOWN:
        case MotionEvent.ACTION_MOVE:
            playerPoint.set((int)event.getX(),(int) event.getY());
    }

    return true;
}

public void update() {
    player.update(playerPoint);
    obstacleManager.update();
}

@Override
public void draw(Canvas canvas) {
    super.draw(canvas);

    canvas.drawColor(Color.WHITE);

    player.draw(canvas);
    obstacleManager.draw(canvas);
}

}

我的猜测是,我需要更改onTouchEvent中的内容,但同样,我真的不确定。任何帮助都将非常感谢!

1 个答案:

答案 0 :(得分:0)

因此,在花了几个小时盯着我的代码并尝试随机更改后,我终于找到了修复程序。我真的不知道是什么原因引起了这个问题,但我有解决方案。我最初怀疑onTouchEvent函数是问题是正确的。正确的代码是:

 public boolean onTouchEvent(MotionEvent event) {

    switch(event.getAction()) {
        case MotionEvent.ACTION_DOWN:
        case MotionEvent.ACTION_MOVE:
            playerPoint.set((int)event.getX()*2,(int) event.getY()*2);
    }

    return true;
}

我唯一改变的是在设置玩家点时我将x和y值乘以2。同样,我不太确定为什么它首先按照它的方式工作,但它现在按预期工作。