如何从libGDX for Android中的Render方法调用Activity

时间:2014-06-16 13:30:35

标签: android libgdx

我正在使用libGDX在Android中开发一个简单的游戏。它只是一个捕捉游戏,其中有一些物品将从屏幕顶部落下,底部还有一个篮子,用户将滚动篮子收集这些物品。几秒钟后游戏将完成,现在在渲染方法中我有一个条件,我需要在30秒后对游戏说。所以我必须调用一个我需要显示GAME OVER图像的活动,但我无法弄清楚如何从Render方法中调用此活动。

我是libGDX的新手,我不知道该怎么做。任何人都可以帮我解决这个问题。任何帮助都会很明显。 感谢。

2 个答案:

答案 0 :(得分:1)

这听起来不像是另一个活动的工作。相反,一种选择是在主Activity中使用不同的屏幕。更多信息:https://code.google.com/p/libgdx-users/wiki/ScreenAndGameClasses

或者,您可以简单地跟踪您的游戏状态(计划,暂停,游戏结束等),并根据该状态绘制不同的内容。像这样:

public void draw(){
   if(state == playing){
       //draw game
   }
   else if(state == gameOver){
      //draw game over
   }
}

答案 1 :(得分:1)

首先显示图像,您应该尝试使用舞台将使您的生活更轻松。在这个阶段你可以添加你想要的多个小部件(Actors),然后通过调用stage.draw()它们将为你呈现。检查下面是如何做到的。

public class GameOver implements com.badlogic.gdx.Screen{

  final Drop game;
  Image gameOverImage;
  Stage gameOverStage; // add this
  TextureRegion textureRegion; // Get region from texture
  TextureRegionDrawable textureRegionDrawable; // drawable from textureRegion

// O̶r̶t̶h̶o̶g̶r̶a̶p̶h̶i̶c̶C̶a̶m̶e̶r̶a̶ ̶c̶a̶m̶e̶r̶a̶; // No need of this stage's viewport has camera

public GameOver(final Drop gam) {

    Log.d("Called ","Called ");

    game = gam;

    gameOverStage = new Stage(new StretchViewport(yourDesiredwidth, yourDesiredHeight)); 
     // You can use different Viewport class if you want see Viewport in Documentation

    textureRegion = new TextureRegion(new Texture(Gdx.files.internal("game_over.png"));
    textureRegionDrawable = new TextureRegionDrawable(textureRegion);
    gameOverImage = new Image(textureRegionDrawable );
    gameOverImage.setBounds(x, y, width, height);

    stage.add(gameOverImage);
   //c̶a̶m̶e̶r̶a̶ ̶=̶ ̶n̶e̶w̶ ̶O̶r̶t̶h̶o̶g̶r̶a̶p̶h̶i̶c̶C̶a̶m̶e̶r̶a̶(̶)̶; // No need of this see above
  // c̶a̶m̶e̶r̶a̶.̶s̶e̶t̶T̶o̶O̶r̶t̶h̶o̶(̶f̶a̶l̶s̶e̶,̶ ̶8̶0̶0̶,̶ ̶4̶8̶0̶)̶; // Same

}

并且在render方法中调用stage.draw(),这样舞台的所有actor都会被渲染,包括你的图像:

@Override
public void render(float delta) {
    // TODO Auto-generated method stub


    Gdx.gl.glClearColor(0, 0, 0.2f, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    stage.act(); // If you want the actors in stage to move or do some other work
    stage.draw(); // Draws all the actors

/* Below is for painting your text although it could be done by creating a Label Actor and add it in stage as the image*/
    stage.getBatch().begin();
    game.font.setColor(0,0,0,1);
    game.font.setScale(3);
    game.font.draw(game.batch, "Game Ends!!! ", 100, 150);
    game.font.draw(game.batch, "Tap To restart", 100, 100);
    stage.getBatch().end();

}

第二个用于显示游戏结束窗口,您可以创建一个表格,将所有游戏添加到表格中的演员,然后当您想要显示它时,您只需将表格添加到舞台上。您可以在文档中阅读有关表格的更多信息。一开始有点棘手,但您稍后会获得奖励。