我认为使用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();
}
答案 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 []大量块)即可使您的游戏复杂化。这不是确切的工作代码,但我认为您可以在几分钟内完成。 询问您是否有疑问