Libgdx EXCEPTION_ACCESS_VIOLATION(0xc0000005)
问题描述:
我目前正试图通过一本名为“学习Libgdx游戏开发”的书中的教程来学习libGdx,并发现了一个奇怪的错误。Libgdx EXCEPTION_ACCESS_VIOLATION(0xc0000005)
有一个叫backToMenu功能:
private void backToMenu() {
// switch to menu screen
game.setScreen(new MenuScreen(game));
}
它的目的仅仅是改变游戏画面ITO主菜单画面。 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();
}
}
的代码只是意味着,显示“游戏结束”消息之后3秒,用户将自动重定向到主菜单。每次调用主游戏循环的渲染函数时都会调用更新函数。但是用户来到后回到主菜单,并试图重新进入的游戏画面,我得到了以下错误:
已经由Java运行时环境检测到致命错误:
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之间 - > GameScreen - > GAMEOVER - > MainScreen - > 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();
}
}
}
答
有同样的问题,我不知道确切的问题是这样的解决方法是什么产生ESCAPE的关键的关键事件 但是你可以通过更换
try {
Robot robot = new Robot();
// Simulate a key press
robot.keyPress(KeyEvent.VK_ESCAPE);
robot.keyRelease(KeyEvent.VK_ESCAPE);
} catch (AWTException e) {
e.printStackTrace();
}
随着keyUp(Keys.ESCAPE);