使用 Sprite Kit 我试图SKPhysicsBody
根据给定的角度设置移动,例如,如果您希望精灵向右移动,您可以指定 1.571 弧度。要将指定的角度转换为速度,我使用以下方法将弧度转换为CGVector
. 我从记忆中实现的原始版本具有将所有角度偏移 90 度的奇怪效果。(即,如果使用 0 度,则精灵向右移动(就像您指定 90 度时一样)
问题:
我通过交换dx
和dy
分配在新版本中修复了这个问题。我的问题是为什么会发生这种情况,我在原件中是否有错误(似乎确实有其他人在网络上这样做)或者是否存在基于所使用的特定坐标系的某些原因。
// ORIGINAL
- (CGVector)convertAngleToVector:(CGFloat)radians {
CGVector vector;
vector.dx = cos(radians) * 10;
vector.dy = sin(radians) * 10;
NSLog(@"DX: %0.2f DY: %0.2f", vector.dx, vector.dy);
return vector;
}
// NEW, SWAPPED DX & DY
- (CGVector)convertAngleToVector:(CGFloat)radians {
CGVector vector;
vector.dy = cos(radians) * 10;
vector.dx = sin(radians) * 10;
NSLog(@"DX: %0.2f DY: %0.2f", vector.dx, vector.dy);
return vector;
}
注意:在 Sprite Kit 中,顺时针旋转也是负数,到目前为止convertAngleToVector
是正顺时针旋转(即 1.571 弧度是正确的,应该在左边)我可以这样做cos(radians*-1)
,sin(radians*-1)
但是基于我交换 dx 可能有一些潜在的原因和dy。