我在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中的内容,但同样,我真的不确定。任何帮助都将非常感谢!
答案 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。同样,我不太确定为什么它首先按照它的方式工作,但它现在按预期工作。