[英]Libgdx EXCEPTION_ACCESS_VIOLATION (0xc0000005)
我目前正在尝试通过遵循标题为“学习Libgdx游戏开发”的书中的教程来学习libGdx,但发现了一个奇怪的错误。
有一个名为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();
}
}
该代码仅表示在显示“ Game Over”消息3秒钟后,用户将自动重定向到主菜单。 每当调用主游戏循环的渲染功能时,都会调用update函数。 但是在用户返回主菜单并尝试重新进入游戏屏幕后,出现以下错误:
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 Key的键事件,但是您无需更换机器人就可以更高效地完成操作
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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.