@Override
public void render(float delta) {
Gdx.gl.glClearColor(0,0,0,1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
combattext.setText(combatstring);
stage.act();
stage.draw();
}
combatstring是一个字符串,显示我游戏中发生的事情。当敌人发动攻击时,它会说发生了什么。当我攻击时,它会说会发生什么。截至目前,我的游戏在战斗中有一个循环,运行转向计数实例。当转弯的时间到来时,参与者会转弯,当转弯结束时,它会更新战斗线。
我有2个combatstrings。一个是我的角色,一个是敌人。以下是一个敌人转身时会发生什么的例子。
if(thisencounter.monster1turn){ //monster1's turn goes in here
thiscombat.getTarget(1); //get enemy's target
thiscombat.calculateVars(1); //calculate all combat variables for
// this turn
thiscombat.theyAttack();
combatstring = thisencounter.thisenemy.species+
" "+thiscombat.action+
" "+thiscombat.theirtarget.species+
" for "+thiscombat.effect;
thisencounter.monster1turn=false;
}
这很好用,我的战斗文字标签会在怪物出现时立即更新。
对于我的角色,他们的轮流使我的屏幕上显示按钮。按钮具有确定操作的侦听器,这是一个示例:
monster1.addListener(new ClickListener(){ //makes the first enemy's
//image clickable, but only
//when the attack button
//has been clicked
@Override
public void clicked(InputEvent event, float x, float y) {
thiscombat.ChooseTarget(1); //various methods that calculate damage,
//output what happened, and put us back in
thiscombat.calculateVars(4); //the loop to wait for next
//participant's turn
thiscombat.youAttack();
combatstring = thisencounter.thisspirit.species+
" "+thiscombat.action+
" "+thiscombat.yourtarget.species+
" for "+thiscombat.effect;
monster1.clear();
monster2.clear();
monster3.clear();
try {
combatloop();
} catch (InterruptedException ex) {
Logger.getLogger(map1field.class.getName()).
log(Level.SEVERE, null, ex);
}
}});
这也很好,除了怪物前的转弯之外。由于在我的回合和怪物的转弯之间没有等待,因此战斗文本会立即显示怪物的行为。
我假设噢,这是因为两个回合之间没有延迟。所以,我在更新怪物combatstring的地方之前扔了一个thread.sleep(2000)。
但这并不能解决问题。它仍然没有显示我的角色在怪物面前的文字。此外,由于在游戏中进入此屏幕时就开始战斗,它会在屏幕上显示任何内容之前等待大约2秒钟。
对于我的生活,我不明白为什么它会像这样。有人能解释发生在我身上的事吗?是因为它在进入thread.sleep之前没有渲染吗?
如果是这样的话,如何强制它在thread.sleep之前渲染,或者我应该使用什么而不是thread.sleep?