为什么在 LIBGDX 中的 setScreen() 之后代码 运行?
Why does a code run after setScreen() in LIBGDX?
我有一个简单的菜单屏幕,其中有四个按钮和每个按钮上的事件侦听器。在这个监听器中,我执行 changeScreen()
方法,它通过调用 setScreen()
来改变屏幕。屏幕变化没有问题,但为什么 changed()
方法体 changeScreen()
之后的代码 运行。
openFile.addListener(new ChangeListener() {
@Override
public void changed(ChangeEvent event, Actor actor) {
parent.changeScreen(Hren.OPENFILE);
System.out.println("Why do I see this text when I am in OPENFILE screen");
}
});
大多数编程语言中都有一个叫做调用堆栈的东西。您调用的每个方法都将 运行 直到它遇到调用 return
的行。 (如果您不键入一个,则在该方法的末尾有一个隐式的 return
。)当您调用一个方法时,它会被添加到堆栈中,因此它是 运行 next before it is弹出并可以从添加的位置继续执行。
在这种情况下,一旦 changeScreen()
returns,它就被弹出堆栈并继续执行此 changed()
方法的其余部分。不管调用它的是什么,当前不再排队等待在屏幕上绘制都没关系。调用堆栈不知道也不关心。
我有一个简单的菜单屏幕,其中有四个按钮和每个按钮上的事件侦听器。在这个监听器中,我执行 changeScreen()
方法,它通过调用 setScreen()
来改变屏幕。屏幕变化没有问题,但为什么 changed()
方法体 changeScreen()
之后的代码 运行。
openFile.addListener(new ChangeListener() {
@Override
public void changed(ChangeEvent event, Actor actor) {
parent.changeScreen(Hren.OPENFILE);
System.out.println("Why do I see this text when I am in OPENFILE screen");
}
});
大多数编程语言中都有一个叫做调用堆栈的东西。您调用的每个方法都将 运行 直到它遇到调用 return
的行。 (如果您不键入一个,则在该方法的末尾有一个隐式的 return
。)当您调用一个方法时,它会被添加到堆栈中,因此它是 运行 next before it is弹出并可以从添加的位置继续执行。
在这种情况下,一旦 changeScreen()
returns,它就被弹出堆栈并继续执行此 changed()
方法的其余部分。不管调用它的是什么,当前不再排队等待在屏幕上绘制都没关系。调用堆栈不知道也不关心。