LibGDX在create()结束后创建ModelInstance

时间:2016-03-06 12:34:11

标签: java android libgdx

好吧,我正在制作一个类似垄断的游戏,在游戏循环活动中,我有一个里面有一个LibGDX的片段,它代表了3D棋盘。在过去的几天里,我一直在苦苦思索如何在加载活动并且LibGDX类中的ModelInstances方法结束后创建其他create()。这是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();
}

所以我基本上需要能够从activity / model调用一个方法来调用它     在Demo3D类中createPiece(String color),导致在棋盘上显示一个新的部分。

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

所以我决定按一下按钮&#34; Start&#34;按下时会获得所有玩家并为每个玩家创建棋子。这是听众:

    ((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<Players>)的位置:

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设备......

1 个答案:

答案 0 :(得分:0)

我相信您需要确保在 drawScene()方法中,迭代集合并绘制/渲染每个组件。