2015-04-06 112 views
0

我在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) 

,这是用于产卵sprite的代码(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) 
    } 
} 

我怎样才能让物体旋转,但仍然会跌倒,好像它受到正常重力的影响?

+0

你是如何加入重力你的精灵?请张贴相关的代码。 – chrissukhram 2015-04-06 04:08:58

回答

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 
+0

我想我已经在做这个了。我再次更新了问题以包含我目前使用的所有代码。这似乎正是你在这里所建议的。我误解任何东西吗? – 2015-04-06 04:31:50

+0

啊,是的,我看到你提到了旋转函数在你的自定义精灵类中? – chrissukhram 2015-04-06 04:32:17

+0

是的,旋转函数在我的自定义精灵类中,但它使用SKView内部的rs.rotate()调用。 – 2015-04-06 04:33:12