问题:我的播放器模型应该转向最后一次鼠标点击的方向但不是慢慢转动它会以所有可能的方式旋转(游戏有一个等轴测视图,模型应该只围绕Y轴旋转但它也围绕X轴和Z轴旋转。
以下方法(在render()中调用)负责模型的转向行为:
public static void turnUnit(){
if(Gdx.input.isButtonPressed(Input.Buttons.LEFT)){
mX = Gdx.input.getX();
mY = Gdx.input.getY();
angle = (float) (180+Math.atan2(mX-Gdx.graphics.getWidth()/2, mY-Gdx.graphics.getHeight()/2)*(180/Math.PI));
newAngle = ((((currentAngle - angle) % 360) + 540) % 360) - 180;
turning = newAngle/60*turnRate;
currentAngle = currentAngle-turning;
}
TestGround.player.transform.setToRotation(Vector3.Y, currentAngle).setTranslation(posX,0,posZ);
}
运动方法(也称为render()):
public static void movement(){
if(northM==true){
TestGround.player.transform.trn(0,0,-1f);
}
if(southM==true){
TestGround.player.transform.trn(0,0,1f);
}
if(westM==true){
TestGround.player.transform.trn(-1f,0,0);
}
if(eastM==true){
TestGround.player.transform.trn(1f,0,0);
}
posX = TestGround.player.transform.getTranslation(Vector3.X).x;
posY = TestGround.player.transform.getTranslation(Vector3.Y).y;
posZ = TestGround.player.transform.getTranslation(Vector3.Z).z;
}
试图使用"旋转"在最后一行,但它只是旋转得更快。
此外,即使这对我没有意义,但经过一些测试后,似乎运动方法会以某种方式干扰转弯方法(沿某个方向移动会以某种方式旋转模型)。
我在这里做了一些根本错误的事情吗?
其他信息:
答案 0 :(得分:0)
Matrix4#getTranslation(Vector3)
方法将指定的向量设置为矩阵的转换组件并将其返回以进行链接。这意味着您作为TestGround.player.transform.getTranslation(vector)
方法的参数提供的向量将被设置(读取:覆盖)到模型实例的转换(位置)。
因此,在致电:
的情况下TestGround.player.transform.getTranslation(Vector3.Y)
这实际上会将Vector3.Y
变量从默认[x:0, y:1, z:0]
修改为矩阵的转换组件设置为。这将导致使用Vector3.Y
变量的任何其他调用(例如您对setToRotation
的调用)的行为方式不同。
要解决此问题,您可以将最后几行修改为:
Vector3 pos = new Vector3();
TestGround.player.transform.getTranslation(pos);
posX = pos.x;
posY = pos.y;
posZ = pos.z;
请注意,您应该将Vector3
的创建移出方法,因此可能会移除posX
,posY
和posZ
成员以支持pos
成员。
所以,你可能想知道两个问题:
为什么getTranslation
方法会修改其参数?这是因为libGDX旨在避免创建垃圾,因为这会在Android等某些平台上创建hick-up。因此,每次调用该方法时,都不允许创建新的Vector3
,而是允许您指定要重用的该类的实例。由于这个原因,您将在多个位置的整个lib中看到此模式。
为什么甚至可以修改Vector3.Y
,使其无用并导致各种问题?这是因为Vector3
类是可变的并且没有封装它成员。所以实际上它允许你vector.x += 3;
而不是强迫你拨打vector.setX(vector.getX() + 3);
。这是出于可读性和性能原因(尽管后者可能会因您的目标平台而异)。此外,java不支持与const
相当的东西。