Java Libgdx异常\访问\冲突(0xc0000005)
我目前正试图通过阅读一本名为“学习libGdx游戏开发”的书中的教程来学习libGdx,并发现了一个奇怪的bug 有一个名为backToMenu的函数:Java Libgdx异常\访问\冲突(0xc0000005),java,libgdx,jvm,Java,Libgdx,Jvm,我目前正试图通过阅读一本名为“学习libGdx游戏开发”的书中的教程来学习libGdx,并发现了一个奇怪的bug 有一个名为backToMenu的函数: private void backToMenu () { // switch to menu screen game.setScreen(new MenuScreen(game)); } 其目的是简单地将游戏屏幕更改为主菜单屏幕。游戏在菜单屏幕上开始,该菜单屏幕转换为游戏屏幕,由用户单击启动。一旦用户进入游戏屏幕,他/她有两种
private void backToMenu () {
// switch to menu screen
game.setScreen(new MenuScreen(game));
}
其目的是简单地将游戏屏幕更改为主菜单屏幕。游戏在菜单屏幕上开始,该菜单屏幕转换为游戏屏幕,由用户单击启动。一旦用户进入游戏屏幕,他/她有两种方法返回主菜单,一种是点击退出按钮,另一种是当游戏结束时。首先,按下退出按钮,我只需收听事件:
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();
}
}
奇怪的是,如果我试图模拟用户按escape按钮而不是直接调用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();
}
}
}
public void更新(float deltaTime)
{
handleDebugInput(deltaTime);
if(isGameOver()){
timeLeftGameOverDelay-=延迟时间;
如果(timeLeftGameOverDelay<0)
{
//init();
试一试{
机器人=新机器人();
//模拟按键
robot.keyPress(KeyEvent.VK_ESCAPE);
robot.keyrease(KeyEvent.VK_-ESCAPE);
}捕获(awtexe){
e、 printStackTrace();
}
}
}
也有同样的问题,我不知道确切的问题是什么,所以解决方法是生成ESCAPE key的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);
也有同样的问题,我不知道确切的问题是什么,所以解决方法是生成ESCAPE key的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);