Java libGDX创建多个对象(俄罗斯方块游戏)

时间:2014-10-21 16:24:36

标签: java libgdx tetris

我认为使用libGDX制作俄罗斯方块克隆会很酷。我很快就想出了如何制作掉落的挡块并将其保持在屏幕内。我的下一个挑战是"产生"当前块一旦到达,就会出现一个新块。我看了几个教程,但他们设计的代码与我的不同,这让我很难弄明白。我知道我必须将对象添加到数组中然后继续在屏幕上绘制它们,但这就是我被卡住的地方。

这是我写过的Block class的一部分。

public void spawnBlock(float delta) {

        box = new Rectangle();
        box.width = 40f;
        box.height = 40f;
        this.setPosition(TetrixGame.WIDTH / 2 - box.width / 2, TetrixGame.HEIGHT);

        boolean isFalling = true;

        for(int i = TetrixGame.HEIGHT; i > 0; --i) {
            box.y -= (fallSpeed * delta);

            if(Gdx.input.isKeyJustPressed(Keys.LEFT) && isFalling) {
                stepLeft();
            }
            if(Gdx.input.isKeyJustPressed(Keys.RIGHT) && isFalling) {
                stepRight();
            } 
            if(Gdx.input.isKeyPressed(Keys.DOWN)) {
                setDown();
            }

            if(box.x < 0) box.x = 0;
            if(box.x > TetrixGame.WIDTH - box.width) box.x = TetrixGame.WIDTH - box.width;
            if(box.y < 0) {
                box.y = 0;
                isFalling = false;
                blocks.add(box); 



            }
        }
    }

public class TetrixGame extends Game {

public static final int WIDTH = 480;
public static final int HEIGHT = 800;
public static final String TITLE = "TetriX";


private Block block;
private ShapeRenderer renderer;
private OrthographicCamera camera;




@Override
public void create() {

    block = new Block();


    renderer = new ShapeRenderer();
    camera = new OrthographicCamera();
    camera.setToOrtho(false, 480, 800);
}



@Override
public void render() {
    super.render();

    Gdx.gl.glClearColor(0, 0, .2f, .8f);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    renderer.setProjectionMatrix(camera.combined);

    camera.update();

    block.spawnBlock(Gdx.graphics.getDeltaTime());





    renderer.begin(ShapeType.Filled);

     //I know this part should be in a loop but it´s not working

    renderer.rect(block.getX(), block.getY(), block.getWidth(), block.getHeight());

    renderer.end();



}

1 个答案:

答案 0 :(得分:0)

我可以用两个词向您推荐这种方法。

创建Block.java类,并将所有函数从spawnBlok和render()函数移入其中。这有助于清除垃圾代码中的主类。 然后像这样

{ 
  Block myBlock;

  void onCreate() {
     myBlock = new Block();
     // .....
  }

  void createBlock() {
     myBlock = new Block();
  }

  render() {
    myBlock.render;
  }
}

最后,当您的代码块触底时,您需要从Block.java调用createBlock()。

    if(this.y < 0) {
        myGame.createBlock(); 
    }

我认为最好重新创建Block而不使用一项。稍后,您可以创建多个同时落下的块(只需创建Block []大量块)即可使您的游戏复杂化。这不是确切的工作代码,但我认为您可以在几分钟内完成。  询问您是否有疑问