在libgdx中绘制一个矩形并增加其长度

时间:2014-04-20 19:38:40

标签: java android libgdx

我是libgdx的新手。

这就是我所知道的:

我们可以使用以下方法创建一个红色的矩形框:

  shapeRenderer.begin(ShapeType.FilledRectangle);
  shapeRenderer.setColor(Color.RED);
  shapeRenderer.filledRect(0, 0, 300, 20);
  shapeRenderer.end();

我想知道的事情:

我希望这个矩形在不同的帧之间保持不变。我想要的是创建一个矩形对象,并在每3秒左右后增加它的长度。

如何做到这一点?从我收集的内容来看,如果我在渲染的batch.begin()和batch.end()中使用此代码,它将在每个帧中创建一个新框。

3 个答案:

答案 0 :(得分:2)

您可以在主类中创建一个整数实例,例如shape_length,并通过存储另一个在其累积增量时间大于或等于3秒后设置为0的变量,每3秒增加一次。

//member functions
private int shape_length = 300;
private float total_time = 0f;

//inside render loop
public void render(float deltaTime){
total_time += deltaTime;
if(total_time >= 3.0f){
    //add 1 to length every 3 seconds
    shape_length += 1;
    total_time = 0.f;
}
shapeRenderer.begin(ShapeType.FilledRectangle);
shapeRenderer.setColor(Color.RED);
shapeRenderer.filledRect(0, 0, shape_length, 20);
shapeRenderer.end();
//fun times here
}

更新:作者想要一种方法将矩形作为一个可用的类而不是每帧都不断绘制的东西,所以这是另一种解决方案:

可能有效的是你创建了一个类,如RectShape,可以存储高度,宽度,Vector2位置等相关信息,然后在你的主类上有一个方法,它将专门呈现你的RectShape,如下所示:

class RectShape {
private float width;
    private float height;
    private Vector2 pos;
    private Color color;
    public RectShape(float w, float h, Vector2 p){
        width = w;
        height = h;
        pos = p;
    }

    public void increaseLength(){
        width += 2.f;
    }
    //getters: getColor(), getPosition(), getWidth, getHeight()

 }

创建一个同时接受RectShape对象和ShapeRenderer

的drawRectangle方法
public void drawRectangle(RectShape mainRect, ShapeRenderer renderer){
    renderer.begin(ShapeType.FilledRectangle);
    renderer.setColor(mainRect.getColor());
    renderer.filledRect(mainRect.getPosition().x,mainRect.getPosition().y,mainRect.getWidth(),mainRect.getHeight());

然后,在你的主文件上

//instantiate object
RectShape s = new RectShape(300.f,200.f,new Vector2(3,2));

//render loop
total_time += deltaTime;
if(total_time >= 3.0f){
    //add 1 to length every 3 seconds
    s.increaseLength();
    total_time = 0.f;
}
shapeRenderer.begin();
drawRectangle(s,shapeRenderer);
shapeRenderer.end();

答案 1 :(得分:0)

每一帧都重新绘制框。

要增加矩形的长度(a.k.a宽度),您可以使用计时器:

在你的游戏类中有一个长度变量

int rectWidth = 300;
int counter = 0; // And a counter

update(float delta)方法中,您现在可以修改矩形的宽度。 如果您的游戏以每秒60帧的速度运行**,则渲染方法称为60次/秒。所以要每3秒更新一次矩形的宽度:

public void update(float delta) {

    if(counter > 60 * 3) {
        rectWidth++;
        counter = 0;
    }

}

public void render() {

    [...]
    shapeRenderer.filledRect(0, 0, rectWidth, 20);
    [...]
    counter++;
}

有更好的方法可以执行时间相关的任务,但这应该为您提供一个起点。

**您可以通过设置ForegroundFPS

来定义帧速率
LwjglApplicationConfiguration cfg = new LwjglApplicationConfiguration();
cfg.foregroundFPS = 60;

答案 2 :(得分:0)

为了增加矩形长度,您需要用变量替换300和20。

 shapeRenderer.filledRect(0, 0, 300, 20);

应该是

 shapeRenderer.filledRect(0, 0, rWidth, rHeight);

然后在你的类中声明这些变量

int rWidth,rHeight;

并将其放在默认构造函数

rWidth=300;
rHeight=20;

然后在你的渲染类中,你将在它的开头有一个单独的方法,它将增加rWidth和rHeight。为了让它快速增长,你可以把它放在渲染方法的顶部。

rWidth++;
rHeight++;

现在试试这个,这样你就可以得到这个想法,然后你可以使用Gdx.graphics.getDeltaTime()根据时间而不是渲染帧来调整它。