我目前正在尝试学习libGdx,请参阅一本名为" Learning Libgdx Game Development"并发现了一个奇怪的错误。
有一个名为backToMenu的函数:
private void backToMenu () {
// switch to menu screen
game.setScreen(new MenuScreen(game));
}
它的目的只是改变游戏画面到主菜单屏幕。游戏从MenuScreen开始,过渡到GameScreen,由用户点击启动。一旦用户进入GameScreen,他/她有两种方式返回MainMenu,通过点击退出按钮或达到游戏结束状态。首先,通过点击退出按钮,我只是听取事件:
public boolean keyUp (int keycode) {
// Back to Menu
if (keycode == Input.Keys.ESCAPE)
backToMenu();
return false;
}
keyUp是一个重写的InputAdapter函数。这个工作非常好。第二个选项出现问题:
public void update (float deltaTime)
{
handleDebugInput(deltaTime);
if (isGameOver()) {
timeLeftGameOverDelay -= deltaTime;
if (timeLeftGameOverDelay < 0)
{
//init();
backToMenu();
}
}
代码只是意味着,&#34; Game Over&#34;消息显示3秒钟,用户将自动重定向到主菜单。每次调用主游戏循环的渲染功能时都会调用更新函数。但是在用户返回主菜单并尝试重新进入游戏画面后,我收到以下错误:
Java Runtime Environment检测到致命错误:
EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x77015d8b, pid=6184, tid=5856
JRE version: Java(TM) SE Runtime Environment (8.0_91-b15) (build 1.8.0_91-b15)
Java VM: Java HotSpot(TM) Client VM (25.91-b15 mixed mode windows-x86 )
Problematic frame:
C [ntdll.dll+0x55d8b]
奇怪的是,如果我试图模拟用户按下转义按钮而不是直接调用backToMenu,它会突然起作用!用户可以在MainScreen - &gt;之间来回切换。 GameScreen - &gt; GameOver - &gt; MainScreen - &gt; GameScreen就好了
public void update (float deltaTime)
{
handleDebugInput(deltaTime);
if (isGameOver()) {
timeLeftGameOverDelay -= deltaTime;
if (timeLeftGameOverDelay < 0)
{
//init();
try {
Robot robot = new Robot();
// Simulate a key press
robot.keyPress(KeyEvent.VK_ESCAPE);
robot.keyRelease(KeyEvent.VK_ESCAPE);
} catch (AWTException e) {
e.printStackTrace();
}
}
}
答案 0 :(得分:0)
有同样的问题,我不知道确切的问题是什么,所以解决方法是生成ESCAPE Key的关键事件 但是你可以通过替换
来更有效地实现它keyUp(Keys.ESCAPE);
使用#t::
Send, {LCtrl Down}
Sleep, 1000
Send, {V}
Sleep, 1000
Send, {V}
Sleep, 1000
Send, {LCtrl Up}
return