game.batch.begin();
for (Array obstacle_array123: obstacle_array) {
body = obstacle_array123;
for (Body bodies: body) {
if (bodies.getUserData() instanceof Array && bodies.isActive()) {
sprites_array = (Array)bodies.getUserData();
for (int fix_pos = 0; fix_pos < sprites_array.size; fix_pos++) {
sprite = sprites_array.get(fix_pos);
if (verts.size != 0) verts.removeRange(0, verts.size - 1);
f = bodies.getFixtureList().get(fix_pos);
s = (PolygonShape)f.getShape();
transform = bodies.getTransform();
for (int i = 0; i < s.getVertexCount(); i++)
{
s.getVertex(i, tmp);
transform.mul(tmp);
verts.add(new Vector2(tmp));
}
rotation_point.set((verts.get(0).x + verts.get(1).x + verts.get(2).x + verts.get(3).x) / 4, (verts.get(0).y + verts.get(1).y + verts.get(2).y + verts.get(3).y) / 4);
sprite.setPosition(rotation_point.x - sprite.getWidth() / 2, rotation_point.y - sprite.getHeight() / 2);
sprite.setRotation(bodies.getAngle() * MathUtils.radiansToDegrees);
sprite.draw(game.batch);
}
}
}
}
game.batch.end();
我有一个游戏,我的身体是由多个方形灯具制成的,所以这是在每个方形灯具上渲染每个方形精灵的代码。
2个问题 - 1.st - &gt;它只渲染数组中的第一个精灵
2.nd - &gt;如果你看下面的循环(已解决)
for (int i = 0; i < s.getVertexCount(); i++)
{
s.getVertex(i, tmp);
transform.mul(tmp);
verts.add(new Vector2(tmp));
}
与
相比,它显然是不同的for (int i = 0; i < s.getVertexCount(); i++)
{
s.getVertex(i, tmp);
transform.mul(tmp);
verts.add(tmp);
}
第二个例子中产生的坐标对于正方形的半宽和半高是错误的。
当我尝试从两个示例中获得协调时,数字是相同的,但是在设置精灵位置时,第二个示例会消失。
答案 0 :(得分:1)
你应该分别提出这两个问题,但要回答你的第二个问题,那么它们就不同了。
在第一个中,每次循环都会向Vector2
添加新的verts
。因此,verts
最终将持有不同Vector2
的负载。
在第二个中,你反复将同一个Vector2
添加到verts
,因此它只会有一个Vector2
一遍又一遍地具有相同的值(请记住Java是通过参考传递)。
警告 - 我的回答是假设verts
是某种标准集合或libgdx Array
。