LibGDX:具有20个可以滚动的矩形的屏幕

时间:2015-02-19 00:46:28

标签: android libgdx

我需要在LibGdx中创建一个包含20个垂直矩形的菜单。

矩形的高度是设备的整个高度。

矩形的宽度设定为20.0f

我有:private Stage stage;我打算将其添加到我的矩形中。

该类称为LevelSelectScreen并实现Screen。

这是我到目前为止所做的:

public class LevelSelectScreen implements Screen {
    private Stage stage;

    private int stageNumber = 20;

    Array<Rectangle> stageRectangles;

    ShapeRenderer shapeRenderer;

    public LevelSelectScreen(){
        stage = new Stage();

        stageRectangles = new Array<Rectangle>(stageNumber);
        for(int i = 0;i<stageNumber;i++){
            stageRectangles.get(i).setWidth(20f);
            stageRectangles.get(i).setHeight(Gdx.graphics.getHeight());
            stageRectangles.get(i).setPosition(new Vector2(20*i,0));
        }

        Gdx.graphics.getWidth();
        shapeRenderer = new ShapeRenderer();


    }

    @Override
    public void render(float delta) {

        Gdx.gl.glClearColor(0.1f, 0.1f, 0.1f, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

        stage.act(Gdx.graphics.getDeltaTime());
        stage.draw();

        //shapeRenderer.setProjectionMatrix(camera.combined);

        shapeRenderer.begin(ShapeRenderer.ShapeType.Filled);

        shapeRenderer.setColor(0, 1, 0, 1);

        for(int i = 0;i<stageNumber;i++){
            Rectangle r = stageRectangles.get(i);
            shapeRenderer.rect(r.x, r.y, r.getWidth(), r.getHeight());

        }
        shapeRenderer.end();

    }

    @Override
    public void resize(int width, int height) {

    }

    @Override
    public void show() {

    }

    @Override
    public void hide() {

    }

    @Override
    public void pause() {

    }

    @Override
    public void resume() {

    }

    @Override
    public void dispose() {

    }
}

什么都没有出现,我不认为我正确使用了Shape Renderer。

如何正确设置可滚动的矩形?

修改

另外,找到this helpful link

1 个答案:

答案 0 :(得分:2)

可变类:

private Stage stage;

private int stageNumber = 20;

Array<Rectangle> stageRectangles;

ShapeRenderer shapeRenderer;

//new, for no magic number, but not required

private float w = 20f;
private float h = Gdx.graphics.getHeight();

private float space = 5;
private float xPos = w + space; 
private float yPos = 0;

在您的代码中

public LevelSelectScreen(){
    stage = new Stage();   


 stageRectangles = new Array<Rectangle>(stageNumber);

    for(int i = 0; i<stageNumber; i++){

        stageRectangles.add(new Rectangle(xPos * i,
                                          yPos,
                                          w, 
                                          h));

                Gdx.app.log("Rectangle add", ""+i);
   }

    shapeRenderer = new ShapeRenderer();
}

你说这不起作用或我理解,但你没有Nullpointer或BoundsException?无论如何都要对你的代码进行一些调整,这就是我所拥有的,这就是你想要的。

enter image description here

PS:当你必须使用听众,图片等时,使用滚动和表格会更加舒服,但这只是一个想法,我希望你已经理解了你是什么说

代码中

for(int i = 0; i<stageNumber; i++){
            stageRectangles.get(i).setWidth(20f);
            stageRectangles.get(i).setHeight(Gdx.graphics.getHeight());
            stageRectangles.get(i).setPosition(new Vector2(25*i,0));
}

此时stageRectangles.get(i).setWidth(20f); 大小为0,则数组具有初始容量 20但是空的。

没有得到这样的东西?

  

IndexOutOfBoundsException:index不能是&gt; = size 0&gt; = 0