gpt4 book ai didi

iphone - 将弧度角转换为 CGVector

转载 作者:太空狗 更新时间:2023-10-30 03:37:44 24 4
gpt4 key购买 nike

使用 Sprite Kit 我试图设置一个 SKPhysicsBody 根据给定的角度移动,例如,如果您希望 Sprite 向右移动,您可以指定 1.571 弧度。为了将指定的角度转换为速度,我使用以下方法将弧度转换为 CGVector。我根据内存实现的原始版本具有将所有角度偏移 90 度的奇怪效果。 (即,如果使用 0 度,则 Sprite 向右移动(就像您指定 90 度一样)

问题:

我在新版本中通过交换 dxdy 赋值修复了这个问题。我的问题是为什么会发生这种情况,我在原来的地方有错吗(网络上似乎确实有其他人这样做)或者是否有一些基于所使用的特定坐标系的原因。

// 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 可能有一些潜在的原因。

Sprite 套件(SKView 坐标):

enter image description here

最佳答案

是的,SpriteKit 默认为右侧。 Physics Collision 示例项目通过实现此方法解决了这个问题:

- (CGFloat)shipOrientation
{
// The ship art is oriented so that it faces the top of the scene, but Sprite Kit's rotation default is to the right.
// This method calculates the ship orientation for use in other calculations.
return self.zRotation + M_PI_2;
}

然后你可以通过调用类似的东西来获得现有的方向:

CGFloat shipDirection = [self shipOrientation];

然后从那里调整 zRotation 属性。

关于iphone - 将弧度角转换为 CGVector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19252930/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com