【问题标题】:How to apply force at an speicific angle in spriteKit?如何在 spriteKit 中以特定角度施加力?
【发布时间】:2015-07-08 13:49:33
【问题描述】:

我想以特定角度向我的SKSpriteNode 施加力。 那么,如何对待我的CGVector在特定角度施力呢?

我已经搜索过了,但不幸的是没有找到任何好方法。

我想要达到的目标:

我的SKSpriteNode 向屏幕移动。顶部有 30、45、60 等按钮。 因此,如果用户按下按钮(即该按钮包含“30”),那么我必须以相同的速度将我的SKSpriteNode 移动到 30 度。

如果你们中的任何人可以帮助我解决这个问题,请帮助我。

【问题讨论】:

  • @sangony ,感谢您的快速回复。我会看到它并让你知道。

标签: ios objective-c vector sprite-kit


【解决方案1】:

首先,您需要将角度(以度为单位)乘以 pi / 180 来转换为弧度

CGFloat angleInRadians = angleInDegrees * M_PI / 180;

然后您可以通过

确定该方向上的向量分量
CGFloat dx = cosf(angleInRadians);
CGFloat dy = sinf(angleInRadians);

最后对精灵施加一个力

[sprite.physicsBody applyForce:CGVectorMake(dx*scale, dy*scale)];

scale 决定施加多大的力。

或者,您可以将精灵旋转到与其运动方向相同的方向

sprite.zRotation = angleInRadians + offset;

其中offset 是您的精灵图像与零度之间的角度差(以弧度表示)。例如,如果您的精灵在zRotation 为零时朝上,则offset 应该是-M_PI_2

【讨论】:

  • 嗨,0x141E,实际上对我的精灵施加了强制。首先我需要阻止我的精灵从以前的力效应。然后需要强制我的精灵进入特定的角度。
  • 你可以用sprite.physicsBody.velocity = CGVectorMake(0,0);停止你的精灵
  • 0x141E 在这里我可以停止精灵。但无法在特定方向移动我的精灵(即以各自的角度)
  • 我建议您将applyForce 替换为applyImpulse 并增加scale 直到精灵按预期移动。
  • @Minimi 如果你取那些弧度角的 sin/cos,你应该得到 (0.7071,0.7071)、(-0.7071,0.7071)、(-0.7071,-0.7071) 和 (0.7071,- 0.7071) 这将导致对象分别向右/向上、向左/向上、向左/向下和向右/向下移动。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-19
  • 2017-12-22
  • 2012-09-16
  • 1970-01-01
相关资源
最近更新 更多