【问题标题】:LibGDX creating ModelInstance after create() has endedLibGDX 在 create() 结束后创建 ModelInstance
【发布时间】:2016-03-06 12:34:11
【问题描述】:

好的,我正在制作一个类似垄断的游戏,在游戏循环活动中,我有一个内部带有 LibGDX 的片段,它代表带有棋子的 3D 棋盘。在过去的几天里,我一直在努力弄清楚如何在加载活动并且 LibGDX 类中的 create() 方法结束后创建额外的ModelInstances。下面是 Demo3D.java 中的棋盘和棋子:

@Override
public void create() {
    pieces = new ArrayList<ModelInstance>();
    environment = new Environment();
    environment.set(new ColorAttribute(ColorAttribute.AmbientLight, 1f, 1f, 1f, 1f));
    environment.add(new DirectionalLight().set(0.8f, 0.8f, 0.8f, -1f, -0.8f, -0.2f));

    camera = new PerspectiveCamera(67, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
    camera.position.set(0f, 1.6f, -4f);
    camera.lookAt(0f, 0f, 0f);
    camera.near = 0.01f;
    camera.far = 12f;

    mapTexture = new Texture("monopoly_board.jpg");
    mapSprite = new Sprite(mapTexture, 1024, 1024);

    modelBatch = new ModelBatch();
    modelBuilder= new ModelBuilder();

    board = new Board3D(mapSprite, mapSprite);
    board.worldTransform.rotate(Vector3.X, 270);
    board.worldTransform.rotate(Vector3.Z, 180);
    board.worldTransform.translate(0, 0, 0);


    createPiece("blue");
    createPiece("green");


    Gdx.input.setInputProcessor(this);
}

@Override
public void render() {
    Gdx.gl.glClearColor(1, 1, 1, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);

    camera.update();
    modelBatch.begin(camera);
    modelBatch.render(board);
    for (ModelInstance piece: pieces) {
        modelBatch.render(piece, environment);
    }
    modelBatch.end();
}

// Some other methods...


    public void createPiece(String pieceColor){
// Some logic...

    ModelInstance mi = new ModelInstance(modelBuilder.createCone(0.2f, 0.4f, 0.2f, 20,
            pieceMat,
            VertexAttributes.Usage.Position|VertexAttributes.Usage.Normal), -1.95f, 0.1f, -2.2f);
    pieces.add(mi);
    render();
}

所以我基本上需要能够从活动/模型中调用一个方法,这会导致调用 createPiece(String color) 在 Demo3D 类中,从而在棋盘上显示一个新棋子。

我测试了从外部调用createPiece(),它创建了一个新片段并显示它,但板消失了。我尝试在createPiece() 末尾调用render(),在这种情况下,板不会消失,但新创建的部分不存在......无法挖掘任何东西,所以如果有人帮忙,我会很高兴。 . 干杯

所以我决定制作一个“开始”按钮,当按下该按钮时,可以获取所有玩家并为每个玩家创建棋子。这是监听器:

    ((Button) findViewById(R.id.populate)).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            boardFragment.populatePieces(currentGame.getPlayers());
            rollDice.setVisibility(View.VISIBLE);
            v.setVisibility(View.INVISIBLE);
        }
    });

boardFragment.populatePieces(Arrl&lt;Players&gt;) 在哪里:

for (Player p: players){
        instance.createPiece(p.getTokenColor());
    }

奇怪的是,昨天我决定在没有任何更改的情况下对其进行测试,并且在 Genymotion 中它运行完美,添加和删除部件完全没有问题/在 Geny 中运行 HTC One X/。但就在几个小时前,我决定在我的物理设备上测试它,问题又出现了……我的设备是带有 Lolipop 5.1 的华为 Mate 7

更新:事实证明,该应用在 Lollipop 设备上无法正常运行尚未在 Android 4/6 的物理设备上进行测试,但在 Genymotion 中,在 4/6 设备上一切都很顺利..

【问题讨论】:

  • 你能分享你在外面调用createPiece(String color) 方法的代码吗?您是否进行了调试以找出您的电路板消失的原因?

标签: java android libgdx


【解决方案1】:

我认为您需要确保在您的 drawScene() 方法中,您遍历 pieces 集合并绘制/渲染每个组件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多