我知道很多問題都被要求解決類似的問題,但我找不到答案。爲什麼我的方法不能持續重複一個動作,直到按下一個libgdx scene2d按鈕並在釋放按鈕時停止它?
問題:我爲我的libgdx遊戲製作了一個屏幕,它看起來像下面的截圖。
我只想通過觸摸輸入。當我按住標有'lower'的按鈕時,它會在中間減少一次。我希望它保持遞減,直到我釋放'下部'按鈕。 我已將按鈕放置在一張桌子上,而桌子上又增加了一個按鈕。要達到什麼樣的,我想我用下面的方法:
TextButton less; //for the button labeled 'lower'
....
***constructor start****
stage = new Stage(new ScreenViewport());
Gdx.input.setInputProcessor(stage);
table = new Table();
table.setFillParent(true);
stage.addActor(table);
......
......
style = new TextButton.TextButtonStyle();
style.up = new TextureRegionDrawable(upRegion);
style.down = new TextureRegionDrawable(downRegion);
style.font = buttonFont;
less = new TextButton("lower", style);
table.add(less).expand().fill();
....
....
less.addListener(new ChangeListener() {
@Override
public void changed(ChangeEvent event, Actor actor) {
while(less.isPressed()) {
Gdx.app.log("ispressed ","yes");
curLevel--;
level.setText("" + curLevel);
Gdx.app.log("curLevel: ",curLevel+"");
try{
Thread.sleep(1000);
}catch (Exception e){
}
}
}
}
....
....
***constructor ends****
但在改變while循環()變爲無限即使我釋放「少/低」 按鈕。我也嘗試過this問題的解決方案,但這也會導致無限循環。
而且我的項目詳情如下:(如果他們不管):
ext {
appName = 'kombat'
gdxVersion = '1.5.2'
roboVMVersion = '1.0.0-beta-01'
box2DLightsVersion = '1.3'
ashleyVersion = '1.3.1'
aiVersion = '1.4.0'
}
我試圖從GAROS但結果在標籤數量的推移,即使單點觸摸和釋放後減少無限的解決方案。這是我做的遵循GAROS的指示:
推翻的行爲方法
package com.zeher.kombat; import com.badlogic.gdx.scenes.scene2d.ui.Skin; import com.badlogic.gdx.scenes.scene2d.ui.TextButton; import com.zeher.kombat.Screens.LevelChooser; /** * Created by zucky on 10/4/2015. */ public class LessButton extends TextButton { LevelChooser lc; public LessButton(String text,TextButton.TextButtonStyle skin,Kombat game) { super(text, skin); this.lc=game.introScreen.lc; } @Override public void act(float delta){ if(lc.lowerFlag) { lc.curLevel--; lc.level.setText("" + lc.curLevel); } }
}
使用的inputListener。
less.addListener(new InputListener() { public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) { lowerFlag = true; return false; } public void touchUp(InputEvent event, float x, float y, int pointer, int button) { lowerFlag = false; Gdx.app.log("occured: ","touchUp on less"); } });
但問題是,觸上事件不被解僱和lowerFlag從來沒有切換到錯誤。
請告訴我是什麼導致了這種意想不到的行爲,以及如何按我想要的方式處理按下和按住手勢。
睡覺遊戲線程將暫停你的整個遊戲。相反,如果您需要等待某些內容,請使用延遲操作或libgdx Timer。或者計算增量時間。和ChangeListener不是你想要的,因爲'change()'不會觸發,直到你釋放按鈕。 – Tenfour04
您是否設法解決Sunil問題? – gaRos
@gaRos尚未。 –