【问题标题】:How to make a node to rotate around a point(CGPoint) in a spritekit game project如何在 spritekit 游戏项目中使节点围绕一个点(CGPoint)旋转
【发布时间】:2014-03-03 21:45:58
【问题描述】:

我们知道,默认的旋转动作是围绕节点的中心点旋转,但是如何让它围绕一个指定的或特定的点旋转呢?

【问题讨论】:

  • 将你的节点添加到另一个 SKNode 的偏移处。更改父级的 zRotation。发生的情况是您的节点以给定的偏移量(定义旋转半径)围绕其父节点旋转。
  • 非常感谢!我试试看。

标签: rotation sprite-kit


【解决方案1】:

我不喜欢使用动作,我在我的游戏中让一切都成为内部时间的函数,它使一切都保持一致,对于更复杂的游戏来说这是至关重要的。

这是我做的一个基于太空的游戏,行星围绕一个点旋转。

说明:

  • 方向:1 或 -1(顺时针或逆时针)
  • _model.orbitSpeed:围绕中心点运动的速度
  • _model.initialAngleInRadians:轨道的起点(因为它是时间的函数)
  • _model.orbitDistance:物体移动到离中心多远
  • 时间:表示时间的整数(在我的大多数游戏中,这相当于帧,因为我一直使用固定时间步长模型)

    self.position = CGPointMake(cos(direction*((((float)time*_model.orbitSpeed)+_model.initialAngleRadians))*_model.orbitDistance, sin(direction*(((float)time*_model.orbitSpeed) +_model.initialAngleRadians))*_model.orbitDistance);

显然,您将需要使用当前时间更新所有移动对象,我在 update 方法中执行此操作。这是相当直截了当的。

你可以归结为:self.position = CGPointMake(cos((float)time)*distanceFromCenter,sin((float)time)*distanceFromCenter);

【讨论】:

  • 这可以通过将旋转节点添加到另一个节点并更改父节点的 zRotation 来更轻松地完成。
  • 是的,但是你会失去对子节点本身的 zRotation 的控制,然后它会继续旋转。或者您需要将其作为反向旋转来破解。我也更喜欢通过纯数学而不是使用儿童轮换的代码。在较大的项目中,我个人喜欢代码的简单性。但这是一个品味问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-22
  • 1970-01-01
  • 1970-01-01
  • 2018-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多