libGDX:为棋盘游戏创建网格

时间:2014-01-29 22:39:03

标签: java android libgdx game-engine

我正在尝试使用libGDX创建一个简单的棋盘游戏。只是你对我想要做的事情有一个粗略的想法,想象一下Bejeweled(虽然我当然不那么复杂)。

游戏涉及一个单元格为正方形的棋盘。根据级别,此网格具有不同数量的单元格,如6x6或8x8。我还想要包含一些漂亮的动画来切换两个相邻单元格的位置(比如Bejeweled)。当然还需要在屏幕上显示一些按钮。

我的问题是:最好的方法是什么?我应该使用一个舞台,然后使用表格作为网格吗?那么我还可以轻松制作动画(使用通用补间引擎)吗?或者单独绘制精灵更好?还是有另一种完全不同的方法来接近这个吗?

感谢您的回答,

干杯,

2 个答案:

答案 0 :(得分:5)

Sprite square = new Sprite(new Texture("texture"));

渲染

float squareWidth = camera.viewportWidth / squaresOnWidth;
float squareHeight = camera.viewportHeight / squaresOnHeight;
square.setWidth(squareWidth);
square.setHeight(squareHeight);
batch.begin(); `
for(int y = 0; y < squaresOnHeight; y++){
    for(int x = 0; x < squaresOnWidth; x++){
        square.setX(x * squareWidth);
        square.setY(y * squareHeight);
        square.draw(batch);
     }
 }
 batch.end();

这应该输出纹理网格,而不是测试。

如果你想创建流畅的动画,你一定要看看UniveralTweenEngine,这是一个它可以做什么的演示:http://www.aurelienribon.com/universal-tween-engine/gwt/demo.html

如果您想要按钮中的网格。

OrthoGraphicCamera camera = new OrthoGraphicCamera();
camera.setToOrtho(false, yourViewportWidth, yourViewportHeight);
camera.translate(xPos, yPos);
Stage stage = new Stage(your wanted stage width, your wanted stage height, false, batch);
stage.setCamera(camera); 
for(int y = 0; y < buttonsOnHeight; y++){
    for(int x = 0; x < buttonsOnWidth; x++){
       stage.addActor(new TextButton("" + x + y * buttonsOnWidth, textButtonStyle); 
    }
 }

渲染

float buttonWidth = camera.viewportWidth / buttonsOnWidth;
float buttonHeight = camera.viewportHeight / buttonsOnHeight;
for(int y = 0; y < buttonsOnHeight; y++){
    for(int x = 0; x < buttonsOnWidth; x++){
        TextButton button = stage.getActors().get(x + y * buttonsOnWidth);
        button.setX(x * buttonWidth);
        button.setY(y * buttonHeight);
        button.setWidth(buttonWidth);
        button.setHeight(buttonHeight);
     }
 }

然后绘制舞台,注意你应该停止当前正在运行的任何批处理因为stage拥有它自己的batch.begin()和batch.end()。您可以在stage.draw();

之后再次启动批处理
 stage.act(delta);
 stage.draw();

答案 1 :(得分:0)

要有一个可以并且应该使用相机的网格:

OrthographicCamera cam = new OrthographicCamera(8,8);

您告诉相机的视口为8 x和8 y。 摄像机(0,0)点位于屏幕中间。

要将其置于左下角,您需要将其位置设置为

cam.translate(camWidth / 2, camHeight / 2); 

现在,您可以在sqare.setX(0)添加sqares作为底线的sqares,或sqare.setY(3)将其添加到从左到右的第4行。对于动画,你也可以使用Actions,它允许你为演员添加不同的动作,让他随着时间的推移执行它们。例如:

actor.addAction(Actions.parallel(Actions.moveTo(float x, float y, float duration), Actions.rotateTo(float rotation, float duration)));

使用此代码示例,您可以告诉演员在(x,y)秒内从他的位置移动到duration,当他移动到此位置时,他会从当前的旋转转到rotation { {1}}秒。 希望这有帮助