0
我正在開發俄羅斯方塊遊戲,我已經開始了碰撞部分。目前第一條線正常工作,碰撞做到了它應該做的。當我得到第二行時,它停止工作..我仍然將矩形添加到數組中,代碼中沒有任何錯誤。我一直在使用調試器,但我找不到問題。這是我做過的第一個編程項目。現在已經學習了3個月的Java,所以這肯定是一個小問題。這是我的創建和渲染方法。謝謝你的閱讀。Java libGDX俄羅斯方塊碰撞
@Override
public void create() {
camera = new OrthographicCamera();
camera.setToOrtho(false, WIDTH, HEIGHT);
blocks = new Array<Blocks>();
boxes = new Array<Rectangle>();
block = new Block();
}
@Override
public void render() {
Gdx.gl.glClearColor(0, 0, .2f, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
block.getRenderer().setProjectionMatrix(camera.combined);
block.draw();
// Update
block.drop(Gdx.graphics.getDeltaTime());
isFalling = true;
Rectangle box = block.getBox();
// Collision
for(Rectangle r: boxes) {
if(box.overlaps(r)) {
isFalling = false;
System.out.println("collision");
block.setY(r.height);
boxes.add(box);
blocks.add(block);
System.out.println("Block added. creating new block..");
block = new Block();
break;
}
}
// Borders
if(box.x < 0) box.x = 0;
if(box.x > WIDTH - box.width) box.x = WIDTH - box.width;
if(box.y < 0) {
isFalling = false;
System.out.println("not falling");
box.y = 0;
boxes.add(box);
blocks.add(block);
System.out.println("Block added. creating new block..");
block = new Block();
}
// Controls
if(Gdx.input.isKeyJustPressed(Keys.LEFT) && isFalling)
block.stepLeft();
if(Gdx.input.isKeyJustPressed(Keys.RIGHT) && isFalling)
block.stepRight();
if(Gdx.input.isKeyJustPressed(Keys.DOWN))
block.setDown();
for(Blocks b: blocks) {
b.draw();
}
}
好的俄羅斯方塊遊戲!看起來不錯,但是..我想我需要以我想象的方式來解決這個問題。否則,我只會複製別人的代碼,並且不會讓我成爲更好的程序員。我已經把我的項目分解成了一些小問題,每個問題都應該讓我接近完成的遊戲。目前它是我需要解決的碰撞部分。但再次感謝=) – Sociopaten 2014-11-05 12:19:03
@Siopiopaten你不需要使用不同的方法,你只需要考慮別人使用的方法,而不是複製它。如果你理解這種方法,你可能會使用它(或稍微改變的版本)來解決其他問題,如果你只是複製它,你將無法再次使用這種方法。在俄羅斯方塊的情況下,「碰撞檢測」僅僅是檢查一個單元格,我的俄羅斯方塊對象是否佔用以及是否已經被其他人佔用而發生碰撞。 – Springrbua 2014-11-05 14:34:58
@Sociopaten請注意,在某些情況下標準碰撞檢測可能會導致問題,例如當您嘗試在兩個方格之間的一個插槽中安裝正方形時,或者甚至在一些更常見的情況下 - 您可能會在不應該有一個。此外,我沒有發明這種方法 - 我認爲我從某處偷走了它:) – mrzli 2014-11-05 19:00:29