我很多天都没有找到一个问题,我正面临一个问题。
在代码中,我不会把所有代码都放在一起,因为它只会使问题复杂化。
我有一个渲染每个帧的游戏类。
public class MyGame implements ApplicationListener {
@Override
public void render() {
//handling event
handleEvent();
//update player position
updatePlayerPosition();
//rendering the player using a batch
renderPlayer();
}
public void handleEvent(){
//when the player prees on C i'm calling a method in another class
// when i do some processing
if (Gdx.input.isKeyPressed(Keys.C)) {
OtherClassForProcessing() ocp = new OtherClassForProcessing();
ocp.process();
}
}
//in this method i have to ask the user to choose an option
//i have to think to stop running this method until the
// user choose an option
//this method has to return a value
public static int displayChoice(List<Integer> ListOfInteger){
return 0;
}
}
public Class OtherClassForProcessing(){
public void process(){
int value= MyGame.displayChoice() ;
}
}
问题是如何让用户在displayChoice方法中选择一个选项。
什么样的小部件可以完成这项工作。
我尝试使用另一个屏幕,但方法不会停止运行。
在用户选择选项之前,我怎么能要求程序停止。
谢谢
我尝试的是:
@Override
public static int displayChoice(List<Integer> ListOfInteger){
//i change the screen when i ask the user to choose from many options
setScreen(new PauseScreen());
a wile loop hwo run until the user choose an option from the other screen
while(PauseScreen.notYetChoosen){
Gdx.app.log("display message ", "the user not yet choose an ption");
}
return PauseScreenValue;
}
当我放入while循环时:
但是当我删除while循环时,屏幕会切换到PauseScreen,但方法完成后无需等待用户选择选项。
修改 我试图避免使用另一个屏幕,即使我使用窗口屏幕块
答案 0 :(得分:0)
你可以使用一个单独的屏幕,我不完全知道你的代码结构但是如果你试图从一个&#34; pop up&#34;那么你可以从概念上做到这一点。或者&#34;暂停屏幕&#34;或者那种性质的东西。
你的游戏画面内部有一个布尔值,当你的&#34;弹出&#34;显示,例如isPaused
,然后您可以使用此布尔值跳过游戏逻辑,同时等待屏幕接收输入。
对于更优雅的方法,您可以使用Game States
来表示您的游戏所处的状态。您可以拥有PLAYING状态,GETTING_INPUT状态等等。然后您可以根据您所处的状态运行游戏逻辑英寸
示例:强>
public void update (float deltaTime) {
if (deltaTime > 0.1f) deltaTime = 0.1f;
switch (state) {
case GAME_READY:
updateReady();
break;
case GAME_RUNNING:
updateRunning(deltaTime);
break;
case GAME_PAUSED:
updatePaused();
break;
case GAME_LEVEL_END:
updateLevelEnd();
break;
case GAME_OVER:
updateGameOver();
break;
}
}
示例来源和更多信息: LIBGDX SuperJumper演示
回复您的修改
你的代码没有改变的原因是因为你有一个while循环打印到Gdx日志,直到输入,所以你的代码卡在那个while循环中。
如果你想走这条路,你可以设置一个“暂停”。将游戏画面中的变量设置为true,然后将屏幕设置为暂停屏幕。在游戏屏幕更新逻辑内部,告诉它在暂停时不要更新。
public void update()
{
if(!paused)
{
//game logic
}
}