2014-12-03 56 views
0

我正在使用libGdx编写Pong类游戏。 在GameScreen中,我想显示每个玩家的剩余生命。 为此,在GameScreen的创建()我有包含几个ImageButtons一个表:加载时间 - GameScreen在显示之前开始运行

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被setChecked,并且imageChecked代表失去的生命

在游戏开始之前,我想显示一条消息,说“游戏开始!”。消息从左到右穿过屏幕,并且仅当消息消失时才开始游戏。

我遇到的问题是lifeTable的实例化需要时间,并且GameScreen在实例化完成之前开始运行。我解释一下:

  • 当我禁用lifeTable时,一切运行平稳,“游戏开始!”消息从左至右穿过屏幕并开始游戏。
  • 当我启用lifeTable时,当按MainMenueScreen中的“New Game”按钮时,会有一个延迟(假设为0.5秒),就像加载时间一样,并且当GameScreen最终显示时,“Game开始!“消息几乎已经穿过屏幕。
  • 我有一个2人模式,有2张lifeTable可以加载,更糟的是,当GameScreen在2人模式下显示“游戏开始!”时,消息已经完成穿越屏幕并且游戏已经开始。

我正在使用AssetManager,游戏中使用的每个纹理在到达MainMenuScreen之前已经加载。 AssetManager帮助减少了GameScreen加载时间,但仍然不令人满意。

是否有预加载lifeTable的东西,与我们使用AssetManager预加载纹理的方式相同? 或者,有没有办法让GameScreen的render()仅在create()完成了对象的实例化时才启动?

谢谢你的帮助。

回答

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"); 
     } 

} 
+0

我会改变答案,因为我的英语不是很好,我想我明白你想要做的很糟糕 – 2014-12-03 05:40:39

相关问题