2017-09-23 80 views
2

我遇到了一個很大的問題,我的應用程序。當我轉換到新的場景時,我的MainMenu場景不會釋放。SKScene沒有定義

//GameViewController 

override func viewDidLoad() { 
    super.viewDidLoad() 

    if let view = self.view as! SKView? { 
     // Load the SKScene from 'GameScene.sks' 
     if let scene = MainMenu(fileNamed: "MainMenu") { 
      scene.scaleMode = .aspectFill 
      view.presentScene(scene) 
     } 
} 

enter image description here

我輕點按鈕,進入一個新的SKScene其具有下面的代碼:

let transition = SKTransition.doorsOpenHorizontal(withDuration: 1.0) 
let next_scene = LuckyScene(fileNamed: "LuckyScene") 
next_scene?.scaleMode = scaleMode 
view?.presentScene(next_scene!, transition: transition) 

它openes我的幸運場景,但它不調用從主要的DEINIT功能菜單。

之後,如果我做同樣的事情,從幸運的場景,比如我想離開現場,回到主菜單,它得到釋放留下我一個巨大的問題現場。

let transition = SKTransition.doorsOpenHorizontal(withDuration: 1.0) 
let next_scene = MainMenu(fileNamed: "MainMenu") 
next_scene?.scaleMode = scaleMode 
view?.presentScene(next_scene!, transition: transition) 

如果用戶輸入Lucky Scene並離開它,則會創建一個新的MainMenu場景。

enter image description here

爲什麼我的MainMenu的場景是沒有得到我的時候過渡到一個新的釋放?

+0

你有一個引用你的MainMenu的地方...找到那個屬性並使其'weak' – Fluidity

+0

https://developer.apple.com/庫/內容/文檔/斯威夫特/概念/ Swift_Programming_Language/AutomaticReferenceCounting.html – Fluidity

回答

0

經過很長時間,找到了答案。問題是這個SKAction沒有被刪除。

let bear_animation : SKAction = SKAction.repeatForever(SKAction.sequence([SKAction.run(idle_animation), SKAction.wait(forDuration: 2.0), SKAction.run(wave_animation), SKAction.wait(forDuration: 3.0)]))   
run(bear_animation, withKey: "bear_animation") 

func idle_animation() 
{ 
    left_arm.run(idle_left_arm)  
    right_arm.run(idle_right_arm) 
    body.run(idle_body) 
} 

func wave_animation() 
{ 
    right_arm.run(wave_right_arm_1) 
    right_arm.run(wave_right_arm_2) 
    left_arm.run(wave_left_arm) 
    body.run(wave_body) 
    left_pupil.run(wave_pupil) 
    right_pupil.run(wave_pupil) 
    left_eyebrow.run(wave_eyebrow) 
    right_eyebrow.run(wave_eyebrow) 
} 

所以,當我提出一個新的場景時,我添加了這樣的代碼。

removeAction(forKey: "bear_animation") 

let transition = SKTransition.doorsOpenHorizontal(withDuration: 1.0) 
let next_scene = LuckyScene(fileNamed: "LuckyScene") 
next_scene?.scaleMode = scaleMode 
view?.presentScene(next_scene!, transition: transition) 
0

你的問題不是動畫動作,而是動作內部的動作。

SKAction.run(idle_animation)是強引用self,讓你的精靈持有到idle_animation,並idle_animation是堅持以精靈,這意味着你的保留計數將永遠不會爲0。我會盡量避免使用功能,而使用弱自我封閉

var idle_animation = 
{ 
    [weak self] in 
    guard let strongSelf = self else return 
    strongSelf.left_arm.run(strongSelf.idle_left_arm)  
    strongSelf.right_arm.run(strongSelf.idle_right_arm) 
    strongSelf.body.run(strongSelf.idle_body) 
} 

這樣,一旦精靈已經從場景中移除,因爲沒有保留將其保持不動,這樣動畫就會掉落。 (注意,你需要爲你的其他動畫做這個方法)

+0

我還有一些問題,我可以得到你的微博? –