【发布时间】:2016-01-05 23:24:24
【问题描述】:
在使用 libGDX 创建了一个非常简单的动画后,我有一些问题想澄清一下,以确保我在开始任何其他更复杂的开发之前了解所有内容。
我有一个这样创建的盒子:
public void createBaseCube(Model modelCube) {
ModelBuilder modelBuilder = new ModelBuilder();
modelCube = modelBuilder.createBox(1f, 1f, 1f,
new Material(ColorAttribute.createDiffuse(Color.GREEN)),
VertexAttributes.Usage.Position | VertexAttributes.Usage.Normal);
this.cubeInstance.transform.translate(0.5f, 0.5f, 0.5f);
}
由于它位于 (0,0,0) 位置的中心,并且希望将其角分配在 (0, 0, 0) 中,因此我在最后一行应用了平移。
这是它的样子(我添加了一组图块以供参考):
然后,我创建动画。我想翻转盒子,所以它会被定位在白色瓷砖上,并在它的右下角旋转
public class CubeAnimation {
...
<<definition of attributes>>
...
public CubeAnimation (ModelInstance cubeModel, float fromAngle, float toAngle, float speed, float alpha){
this.cubeInstance = cubeModel;
this.fromAngle = fromAngle; //value set to 0
this.toAngle = toAngle; //value set to 90f
this.speed = speed; //value set to 1f
this.alpha = alpha; //value set to 0
}
public void update(float delta) {
alpha += delta * speed;
if (alpha >= 1f) {
finished =true;
return;
}
float angle = alpha * (toAngle - fromAngle);
fromAngle = angle;
Vector3 t = new Vector3(0.5f, -0.5f, 0);
cubeInstance.transform.idt().translate(t).rotate(Vector3.Z, -angle).translate(t.scl(-1));
}
一切似乎都很好,代码也很简单,但是(这里是问题)在应用动画时,框再次被翻译到中心(所以在创建框时首先翻译被撤消),并且 -惊喜 - 虽然我将 90f 作为参数传递给动画,但立方体仅旋转 45 度(当我设置为 180 时,它按预期旋转:90)。
动画后的样子:
这里有什么问题?提前感谢您的帮助!
【问题讨论】:
-
尝试删除行
fromAngle = angle;我怀疑只有alpha需要更改才能正常旋转。 -
点赞!!这解决了设置 90f 的问题,但只能旋转 45f!谢谢!! :D
-
关于未完成的翻译还有待解决... :_(
-
同时进行平移和旋转可能非常棘手,而且难以理解!不要太沮丧哈哈