2017-05-16 26 views
0

我想用彈跳球做一個遊戲,我想每8秒產生一個球。目前,它在產卵後不會移動。我遇到的問題是,第一次球產生後,應用程序在接下來的5秒內崩潰。我不知道爲什麼會發生這種情況。我在touchesBegan函數中放置了scheduledTimerWithTimeInterval()。運行後應用程序崩潰了嗎?

func scheduledTimerWithTimeInterval(){ 
    Enemytimer = Timer.scheduledTimer(timeInterval: 8, target:self, selector:#selector(GameScene.spawnEnemies), userInfo:nil, repeats:true) 
} 
func randomBetweenNumbers(firstNum: CGFloat, secondNum: CGFloat) -> CGFloat{ 
    return CGFloat(arc4random())/CGFloat(UINT32_MAX) * abs(firstNum - secondNum) + min(firstNum, secondNum) 
} 

func spawnEnemies(){ 
    let xPos = randomBetweenNumbers(firstNum: 0, secondNum:frame.width) 
    let yPos = randomBetweenNumbers(firstNum: 0, secondNum: frame.height) 
    enemies.size = CGSize(width: 20, height:20) 
    enemies.color = UIColor(red:255.0,green:0.0,blue:0.0,alpha:1.0) 
    enemies.colorBlendFactor = 1.0 
    enemies.position = CGPoint(x: xPos, y:yPos) 
    enemies.physicsBody?.affectedByGravity = false 
    self.addChild(enemies) 
+0

請編輯你的問題,並告訴我們崩潰的消息,所以我們可以有更好的幫助。 –

+1

不要使用Timer,使用內置的Spritekit函數,你可以找到如何在SO – Knight0fDragon

+0

的地方找到它。它崩潰的原因可能是因爲你試圖向另一個父節點添加'enemies'節點,而它已經有一個父母(根據你的代碼) – Whirlwind

回答

0

您很可能會遇到內存問題。我將移動touchesBegan中的scheduledTimerWithTimeInterval方法。現在,每當用戶觸摸屏幕時,遊戲就會啓動一個新的定時器(不啓動其他定時器)。將scheduledTimerWithTimeInterval移動到viewDidLoad或類似startGame的地方,以確保它只被調用一次。

+0

但我只希望計時器在用戶觸摸屏幕後開始。但是,一旦現在加載應用程序,就會創建一個新球,並且我希望在用戶第一次觸摸屏幕後創建一個新球。只是爲了測試,我試圖把它放在viewDidLoad中,並且在創建新球后大約5秒後它仍然崩潰。 :/ – at26

相關問題