【发布时间】:2013-10-15 16:25:51
【问题描述】:
使用 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 弧度是正确的,应该在左边)我可以做 @987654328 @ 和 sin(radians*-1) 但基于我交换 dx 和 dy 可能有一些根本原因。
Sprite 工具包(SKView 坐标):
【问题讨论】:
标签: iphone objective-c sprite-kit skview