【问题标题】:Prevent sprite rotation from changing gravity防止精灵旋转改变重力
【发布时间】:2015-04-06 04:02:08
【问题描述】:

我在 SpriteKit 中有一个函数,它在屏幕顶部生成一个精灵(它是一个正方形),然后重力将精灵拉到屏幕底部。我试图让精灵在不确定的时间内平滑旋转,直到它到达屏幕底部时被移除。以下代码在精灵的类中:

func rotate() {
    var action = SKAction.rotateByAngle(CGFloat(M_PI_2), duration: NSTimeInterval(1.5))
    var repeatAction = SKAction.repeatActionForever(action)
    self.runAction(repeatAction)
}

我遇到的问题是,当精灵转动时,精灵向自身底部的方向移动,而不是向屏幕底部移动(应该是重力方向)。为了进一步澄清,物体旋转,但当它旋转到 90 度时,它向侧面而不是向下移动。这对我来说没有意义。这是我用来在didMoveToView() 函数中添加重力的代码:

self.physicsWorld.gravity = CGVectorMake(0.0, -1.8)

这是用于生成精灵的代码(rs.rotate() 调用上面列出的旋转方法):

func spawnRedSquares() {
    if !self.gameOver {
        let rs = RedSquare()
        var rsSpawnRange = randomNumberBetween(self.leftSideBar.position.x + rs.sprite.size.width / 2, secondNum: self.rightSideBar.position.x - rs.sprite.size.width / 2)
        rs.position = CGPointMake(rsSpawnRange, CGRectGetMaxY(self.frame) + rs.sprite.size.height * 2)
        rs.zPosition = 3
        self.addChild(rs)
        self.rsArray.append(rs)
        rs.rotate()

        let spawn = SKAction.runBlock(self.spawnRedSquares)
        let delay = SKAction.waitForDuration(NSTimeInterval(timeBetweenRedSquares))
        let spawnThenDelay = SKAction.sequence([delay, spawn])
        self.runAction(spawnThenDelay)
    }
}

我怎样才能让物体旋转,但仍然像受到正常重力的影响一样掉下来?

【问题讨论】:

  • 你是如何为你的精灵添加重力的?请发布相关代码。

标签: ios swift sprite-kit game-physics skphysicsbody


【解决方案1】:

看起来你正在向“自我”添加旋转动作,我认为这是你的场景而不是你的精灵。这导致整个场景旋转,因此它的重力也在旋转。

将旋转动作添加到您的精灵中,这应该可以解决问题。

示例:假设您的方形精灵被称为squareSprite

let action = SKAction.rotateByAngle(CGFloat(M_PI_2), duration: NSTimeInterval(2))
let repeatAction = SKAction.repeatActionForever(action)
squareSprite.runAction(repeatAction) //Add the repeatAction to your square sprite

【讨论】:

  • 我想我已经这样做了。我再次更新了问题以包含我当前使用的所有代码。这似乎正是你在这里建议的。我是不是误会了什么?
  • 啊,是的,我看到您提到旋转功能在您的自定义精灵类中?
  • 是的,旋转函数在我的自定义精灵类中,但它是使用rs.rotate() 调用的,它位于 SKView 中。
  • 你能用一个红色方块试试,没有“spawn and delay”动作吗? self.spawnRedSquares 有什么作用?
  • 问题仍然存在,但只生成 1 个方块,而不是每隔几秒生成一次。问题是当精灵旋转时,重力会发生 90 度的变化。但这不是我想要的。我希望精灵在下落时可以 360 度无限旋转。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多