2015-04-06 94 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