添加到新SKScene时,SKEmitterNode会消失

时间:2017-03-26 06:41:39

标签: swift sprite-kit skscene skemitternode

我有一个SKEmitterNode正在SKScene上运行,我希望在不中断粒子的情况下将其移至下一个SKScene

通常情况下我会这样做:

let scene: SKScene = GameScene(size: self.size)
let transition = SKTransition.crossFade(withDuration: 0.5)
self.view!.presentScene(scene, transition: transition)

然后是下一个SKScene:

override func didMove(to view: SKView) {
    particleEmitter.removeFromParent()
    addChild(particleEmitter)
}

这完全没问题但是在这种情况下我不想在转移到下一个SKScene时使用转换。我尝试过没有像:

这样的过渡
let scene: SKScene = GameScene(size: self.size)
self.view!.presentScene(scene)

即使我已从最后SKEmitterNode删除SKScene并将其作为子项添加到新SKSceneSKEmitterNode也会在新SKTransition出现时消失。

我的问题是为什么import java.lang.Runnable; class counter implements Runnable { private int x; public counter(){x=0;} public int getval(){return x;} public void run() { try{ while(x<5){ System.out.println(Thread.currentThread().getName()+ ":" + (x++)); Thread.sleep(250); } System.out.println("Exit from thread:"+Thread.currentThread());} catch(InterruptedException e){ System.out.println("InterruptedException"); } } } public class client { public static void main(String args[]) { counter obj=new counter(); Thread td=new Thread(obj,"bac"); td.start(); int val; try{ do{ val=obj.getval(); System.out.println(td.getName()+ ":=" + val); Thread.sleep(1000); }while(val<5); } catch(InterruptedException e) { System.out.println("InterruptedException 2"); } System.out.println("Exit from thread:"+td.getName()); } } 消失了,如何在不使用SKScene之间的过渡的情况下让它工作。非常感谢任何帮助,谢谢。

注意:使用持续时间为0的jboss-deployment-structure.xml也可以,但这会在转换过程中产生明显的“闪烁”。

1 个答案:

答案 0 :(得分:2)

不应该有任何闪光等。如果我理解正确,您需要做的是在全局范围内创建一个发射器。在呈现下一个场景之前,您应该从其父级中删除发射器。当您在下一个场景中时,可以向其添加发射器。我只是试过,它对我有用,没有任何延迟,闪烁或其他东西。

以下是代码......有两个场景...... GameScene

import SpriteKit

let emitter = SKEmitterNode(fileNamed: "Fireflies")

class GameScene: SKScene {

    override func didMove(to view: SKView) {

        backgroundColor = .black

        if let emitterNode = emitter {

             addChild(emitterNode)
        }
         print("Game Scene")

    }

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {

        if let scene = WelcomeScene(fileNamed: "WelcomeScene") {

            scene.scaleMode = .aspectFill

            emitter?.removeFromParent()

            self.view?.presentScene(scene)
        }
    }
}

WelcomeScene

import SpriteKit

class WelcomeScene:SKScene{

    override func didMove(to view: SKView) {

        backgroundColor = .black
         print("Welcome Scene")
        if let emitterNode = emitter {
            addChild(emitterNode)

        }
    }

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {

        if let scene = GameScene(fileNamed: "GameScene") {

            scene.scaleMode = .aspectFill
            emitter?.removeFromParent()
            self.view?.presentScene(scene)
        }

    }
}

对于发射器,我使用了标准的萤火虫模板。