好吧,我正在制作一个类似垄断的游戏,在游戏循环活动中,我有一个里面有一个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设备......
答案 0 :(得分:0)
我相信您需要确保在 drawScene()方法中,迭代件集合并绘制/渲染每个组件。