【发布时间】: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<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 设备上一切都很顺利..
【问题讨论】:
-
你能分享你在外面调用
createPiece(String color)方法的代码吗?您是否进行了调试以找出您的电路板消失的原因?