2016-03-30 56 views
0

嘗試使用Sprite Kit製作我的第一個Swift應用程序。 應用程序必須創建最多5個必須隨機移動屏幕的對象。速度增加,尺寸每5秒減少一次。 場景設置正確,對象出現並移動,但一段時間後CPU使用率變爲100%,FPS降至0,應用程序掛起。有時它會繼續工作幾秒鐘,有時它不會。 是什麼原因?Sprite Kit應用程序掛起

我只是在Xcode noob - 在模擬過程中是否有可能找到哪些代碼塊正在工作?

以下是更新功能。我沒有包括didMoveToViewtouchesBegan部分原因他們似乎沒有影響到這個問題。

override func update(currentTime: CFTimeInterval) { 
    if (currentTime-oldTime)>1 { 
     if arrayofAims.isEmpty==false { 
      for currentAim in arrayofAims { 
       repeat {xvelocity=(Int(arc4random())%3 - 1) * aimSpeedX} while xvelocity == 0 
       repeat {yvelocity=(Int(arc4random())%3 - 1) * aimSpeedX} while yvelocity == 0 
       currentAim.physicsBody?.applyForce(CGVectorMake (CGFloat(xvelocity), CGFloat(yvelocity))) 
       } 
      } 
     oldTime=currentTime 
     timecount+=1 
    } 
    if timecount>5 { 
     if aimSpeedX < 5000 { 
      aimSpeedX+=200 
     } 
     if aimSizeRatioX > 0.3 { 
      aimSizeRatioX -= 0.05 
      aimSizeRatioY -= 0.05 
     } 
     timecount=0 
     if arrayofAims.count<6 { arrayofAims.append(createAnAim()) 
      currentAim=arrayofAims[arrayofAims.count-1] 
      addChild(currentAim) 
     } 
    } 
} 
+0

歡迎互動,(因此)!請閱讀[問]部分。順便說一句,還沒有人回答,所以你感謝誰? –

+0

作爲最原始的調試方式,嘗試刪除部分代碼以隔離問題。因此,首先刪除'addChild(currentAim)'行並等待問題是否仍然存在。你完全確定更新方法是負責任的嗎?啓用調試標籤以顯示draws count('skView.showsDrawsCount')和節點數('skView.showsNodesCount')。當應用程序卡住時,您會看到哪些數字? – Whirlwind

+0

或者用最小的例子更新你的問題,它可以重現你遇到的問題(甚至上傳一個github回購)。 – Whirlwind

回答

-1

可能通過它的一些Sprite Kit碰撞模型的bug? A的

aim.physicsBody = SKPhysicsBody(texture: aim.texture!, size: aim.size) 
aim.physicsBody?.categoryBitMask = aimCategory 
aim.physicsBody?.collisionBitMask = aimCategory | boundCategory 

aim.physicsBody?.collisionBitMask = boundCategory 

取代它,並凍結消失了,但對象不與對方

+0

這不是一個很好的答案,因爲你不解釋什麼aimCategory或boundCategory是互動,同時也從來不是一個好主意,假設它是一個Sprite Kit的錯誤,總是假設錯誤在你的身上,直到你可以證明它是API的錯誤 – Knight0fDragon

+0

@ Knight0fDragon你是對的,但我認爲它有一些API問題因爲它在物體碰撞期間的隨機時間出現並且在碰撞檢查被移除時消失。這個類別聲明是let aimCategory:UInt32 = 0x1 << 0 let boundCategory:UInt32 = 0x1 << 1 – DimitryTheBlack

+0

@DimitryTheBlack如果您上傳的回購與最小的例子,可以重現問題,我們將能夠告訴更多。我懷疑這是SpriteKit的一個bug,我會說你的代碼出了問題(但從來不知道)。 – Whirlwind