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

LibGDX: A screen with 20 Rectangles that can be scrolled

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

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

矩形的宽度是一组20.0f

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

class 调用 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() {

    }
}

什么都没有出现,我认为我没有正确使用形状渲染器。

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

编辑

此外,发现 this helpful link

变量class:

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 ?无论如何,对您的代码进行一些调整,这就是我所拥有的,这就是您想要的。

PS: 使用滚动条和 table 不会更舒服 table 当你必须使用监听器时, 图片等等, 但这只是一个想法, 我希望你明白你在说什么

在您的代码中:

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 can't be >= size 0 >= 0