我以为我已经理解了这个问题,但是这里有些错误。当用户(到目前为止,我)尝试按键时,什么也没有发生,而我在理解我错过的内容时遇到了很多麻烦。

在介绍一些代码以帮助阐明我的问题之前,请考虑以下问题:我正在使用Android的Lunar Lander示例制作我的第一个“真实” Android程序。当然,在该示例中,存在LunarView类,并且在其中嵌套了LunarThread类。在我的代码中,这些类的等效项分别是Graphics和GraphicsThread。

我也可以在Android上以2D格式制作精灵动画。我有一个Player类,比方说GraphicsThread具有一个称为“player”的Player成员。此类具有四个坐标-x1,y1,x2和y2,并且它们定义了要在其中绘制精灵的矩形。我已经解决了这个问题,以便可以完美地处理。每当调用doDraw(Canvas canvas)方法时,它只会查看那些坐标的值并相应地绘制精灵。

现在,让我们说-这并不是我要使用的程序-我要使程序所做的一切只是在屏幕的一个位置显示Player画面,直到用户第一次按下Dpad的左按钮。然后,该位置将被更改为屏幕上的另一个设置位置,并且在程序的其余部分将始终在该位置绘制精灵。

还请注意,Graphics中的GraphicsThread成员称为“线程”,而GraphicsThread中的SurfaceHolder成员称为“mSurfaceHolder”。

因此,请在Graphics类中考虑以下方法:

@Override
public boolean onKeyDown(int keyCode, KeyEvent msg) {
    return thread.keyDownHandler(keyCode, msg);
}

另外,请在GraphicsThread类中考虑以下方法:
boolean keyDownHandler(int keyCode, KeyEvent msg) {
    synchronized (mSurfaceHolder) {
        if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) {
            player.x1 = 100;
            player.y1 = 100;
            player.x2 = 120;
            player.y2 = 150;
        }
    }
    return true;
}

现在,假设玩家的坐标开始为(200,200,220,250),为什么当我按Dpad时他不做任何不同操作:左?

谢谢!

最佳答案

在我担心实际运动之类的东西之前,我会考虑对数...

就像是:

Log.d("lunar", "keyCode = ["+String.valueOf(keyCode)+"] // msg = ["+String.valueOf(msg)+"]");

这样一来,我就可以对系统正在注册的内容有个了解,然后再担心我所说的注册数据该怎么做...之后,您可以决定是否要发送正确的数据,然后再担心线程工作等等

希望可以帮助诊断等。(所有这些都是徒手写的,可能包含错误)

08-25 14:39