我有一个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
并将其作为子项添加到新SKScene
,SKEmitterNode
也会在新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
也可以,但这会在转换过程中产生明显的“闪烁”。
答案 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)
}
}
}
对于发射器,我使用了标准的萤火虫模板。