【问题标题】:How can I spawn sprites every 10 degrees around a circle?如何围绕一个圆圈每 10 度生成一次精灵?
【发布时间】:2016-04-07 13:18:27
【问题描述】:

我对编码很陌生,希望能在我正在学习的一个小游戏上获得一些帮助。所以我有一个圆圈,我试图在圆圈周围每隔 10 度创建对象。我试过这个:

override func didMoveToView(view: SKView) {

     self.spawnArrows()

}

func spawnArrows() {

     for var i = 0; i < 36; i++ {

         let arrow = self.createArrow(specificPointOnCircle(Float(self.frame.size.width), center: CGPoint(x: CGRectGetMidX(self.frame), y: CGRectGetMidY(self.frame)), angle: Float(i * 10)))
         self.addChild(arrow)

     }
}

func specificPointOnCircle(radius:Float, center:CGPoint, angle:Float) -> CGPoint {

    let theta = angle * Float(M_PI) + 2.0
    let x = radius * cosf(theta)
    let y = radius * sinf(theta)
    return CGPoint(x: CGFloat(x) + center.x, y: CGFloat(y) + center.y)

}

func createArrow(position: CGPoint) -> SKSpriteNode {

    let arrow = SKSpriteNode(imageNamed: "Arrow.png")
    arrow.zPosition = 2
    arrow.size = CGSize(width: self.frame.size.width * 0.12, height: self.frame.size.width * 0.025)
    arrow.position = position
    return arrow

}

但是什么都没有出现。我的数学是否有问题,或者我的语法,或者两者兼而有之?任何帮助表示赞赏。

【问题讨论】:

  • 你的数学有点晕。在spawnArrows() 中打印您的arrow.location。它似乎根本没有改变。 Angle 是 SpriteNode 的角度。对不起,但我没有时间进一步检查 atm... :(
  • 度到弧度的公式是let theta = angle * Float(M_PI) / 180
  • 顺便说一句,你的半径太大了,比你的场景大小还大,你需要把它变小
  • 将半径设置为Float(self.frame.size.width)/10 并将弧度公式更改为let theta = angle * Float(M_PI) / 180 为我解决了这个问题。你应该回答@Knight0fDragon

标签: swift sprite-kit 2d-games


【解决方案1】:

问题 1:

您将度数转换为弧度的公式是错误的,公式为:

let theta = angle * Float(M_PI) / 180

问题 2:

您的半径是场景的整个大小,因此您正在绘制从场景中心到场景长度的点,该长度超出场景宽度的 2 倍。至少,将半径设置为 width / 2 以在宽度的最边缘看到它

【讨论】:

  • 感谢您解决了这个问题!
  • 半径是正确的(因为我让精灵稍后移动到屏幕上)但弧度公式不正确。
  • 那么半径问题就是为什么你从一开始就什么都没看到
  • 作为一个额外的问题,我如何让循环在迭代之间等待 1 秒,以便每个对象在最后一个后 1 秒生成?
  • 这与你现在的任务完全不同。你不能像你有的那样做循环。相反,您需要该类有一个变量来记住最后一个角度是什么,并在等待 1 秒然后创建的节点上使用 SKActions。上面有很多示例,请查找SKAction.waitForDurationSKAction.sequenceSKAction.runBlock。这三个应该可以帮助你
猜你喜欢
  • 1970-01-01
  • 2021-06-24
  • 2019-04-25
  • 2019-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多