我正在使用libGdx来编写类似Pong的游戏。 在GameScreen中,我想显示每个玩家的剩余生命。 为此,在GameScreen的create()中,我有一个包含几个ImageButtons的表:
for(int i = 0; i < lifePlayer1; i++){
lives[i] = new ImageButton(skin, "Life");
lifeTable.add(lives[i]);
lives[i].setVisible(true);
lives[i].setTouchable(Touchable.disabled);
}
每个ImageButton代表一种生活。当玩家失去生命时,对应于失去的生命的ImageButton将被设置为CheckChecked,而imageChecked则代表失去的生命
在游戏开始之前,我想显示一条消息“Game Starts!”。消息从左到右穿过屏幕,只有当消息消失时才开始游戏。
我遇到的问题是lifeTable的实例化需要时间,并且GameScreen在实例化完成之前开始运行。我解释一下:
我正在使用AssetManager,并且在到达MainMenuScreen之前已经加载了游戏中使用的每个纹理。 AssetManager帮助减少了GameScreen的加载时间,但它仍然不能令人满意。
是否有预加载lifeTable的东西,就像我们使用AssetManager预加载纹理一样? 或者,有没有办法让gameScreen的render()仅在create()完成对象的实例化时启动?
感谢您的帮助。
答案 0 :(得分:0)
可能不是最有效的制作方式,但在阅读你的问题时发生了这种情况,而且很简单
Variable Class
private boolean loadForTest = false;
@Override
public void show() {
.//Other Code
image = new Image(YourAssetManager.get("YourImage.png", Texture.class));
image.addAction(Actions.sequence(
Actions.moveTo(Gdx.graphics.getWidth(),
(Gdx.graphics.getHeight()/2),
1f)));
image.setPosition((-100f), Gdx.graphics.getHeight()/2);
YourStage.addActor(image);
}
@Override
public void render(float delta) {
.//Other Code
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
stage.act(Gdx.graphics.getDeltaTime());
stage.draw();
if (loadForTest == false){
if (image.getActions().size == 0){
Gdx.app.log("test" ,"now load table");
for (int i = 0; i <lifePlayer1; i ++) {
vidas [i] = new ImageButton (piel, "Life");
lifeTable.add(lives[i]);
lives[i].setVisible(true);
lives[i].setTouchable(Touchable.disabled);
}
loadForTest = true;
}else{
Gdx.app.log("test" ,"Your Other Code Play");
}
}
}
修改强> 添加了另一个代码因为我的英语不是很好而且不太清楚你想做什么
Variable Class
private boolean loadForTest = false;
@Override
public void render(float delta) {
.//Other Code
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
stage.act(Gdx.graphics.getDeltaTime());
stage.draw();
if (loadForTest == false){
for (int i = 0; i <lifePlayer1; i ++) {
vidas [i] = new ImageButton (piel, "Life");
lifeTable.add(lives[i]);
lives[i].setVisible(true);
lives[i].setTouchable(Touchable.disabled);
}
loadForTest = true;
}else{
Gdx.app.log("test" ,"Your Image load, Your Other Code Play");
}
}