尝试为onKeyDown事件(Android)创建自己的方法
我有两节课:
MainPanel(我定义了一些方法)
MainThread(我用这些方法循环创建经典游戏结构)
在MainPanel类中,我有这个方法来捕获是否按下了一个键
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch(keyCode) {
case KeyEvent.KEYCODE_DPAD_UP:
Log.i(TAG,"key up was pressed");
return true;
}
return false;
}
它的工作正确,我的问题是,是否可以将onKeyDown创建为正确的方法,并在循环中使用它来避免监听器。想法是在MainPanel中定义这样的方法:
public void myOwnOnKeyDown(int keyCode, KeyEvent event) {
switch(keyCode) {
case KeyEvent.KEYCODE_DPAD_UP:
Log.i(TAG,"key up was pressed");
}
}
然后,将它调用到MainThread类的循环中,就像这样......
public class MainThread extends Thread {
//...
public void loop() {
Canvas canvas;
KeyEvent event; Log.d(TAG, "Starting game loop");
while (running) {
this.MainPanel.MyOwnOnKeyDown(keyCode, event);
this.MainPanel.moveElements();
this.MailPanel.drawElements(canvas);
}
}
在以下行我不知道如何传递参数keyCode ...
this.MainPanel.MyOwnOnKeyDown(keyCode, event);
有可能吗?
提前致谢
没有找到相关结果
已邀请:
2 个回复
骚瓤
具有此循环的类还有一个队列,用于保存从播放器进入的所有事件:
“GameEvent”类具有时间戳记(当事件发生时)。然后是子类,如KeyGameEvent(用于键盘事件)和TouchGameEvent(用于屏幕触摸),ScrollGameEvent,LongPressGameEvent(TouchGameEvent的子类)等。 这是一个例子:
然后,这些GameEvent类被实例化并放置在标准Android事件处理程序方法的队列中,例如:
最后,handleInput()方法如下所示:
显然(我希望)在诸如由handeInput()调用的processKeyGameEvent()之类的方法中,你实际上检查了哪些键被按下/释放,并让你的游戏逻辑做任何适合这种按键/释放的操作。 如果您的游戏只对键盘输入事件感兴趣(而不是触摸等),那么您可以放弃创建GameEvent类层次结构,只需将onKeyDown()接收的KeyEvent放入队列即可。
掸牛浓疗
然后你的onKeyDown看起来类似于:
和onKeyUp看起来类似于:
你的主循环看起来像:
您可能需要更复杂的逻辑来跟踪按键操作,但这会将按钮事件与更新分开,以便您可以连续移动。