swift – 在Sprite Kit中复制粒子发射器效果

前端之家收集整理的这篇文章主要介绍了swift – 在Sprite Kit中复制粒子发射器效果前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要有一个粒子发射器的效果在2个地方出现重复(对于分屏),我想知道有没有人遇到这样做的方式。我的目标是让这个运行在iOS 10上。这是我迄今为止所尝试的。

>将targetNode分配给SKNode,然后复制每个框架的SKNode:targetNode在iOS 10中不起作用。
>将粒子发射器分配给SKNode,并使用view.textureFromNode使纹理复制每帧:占用1/10秒的帧,对我来说太慢了。
>将自定义操作分配给将节点复制到另一个SKNode的粒子节点:操作将不会在iOS 10上运行
>复制现有的粒子节点,希望种子不是随机的:种子是随机
>尝试在更新时复制粒子发射器:粒子刚刚产生在原点
>尝试SKReferenceNode:只是一个发射器的副本,它自己运行

剩下的唯一选择是写我自己的粒子发射器,我想避免,所以我想知道有没有人有这个问题,知道一个解决方案来达到预期的效果

我可以做的另一件事是预先投射发射器,但如果我走这条路线,这将占用大量纹理内存。

编辑:为了帮助可视化,我画了一张照片,白色的边框显示了分屏显示的位置。黑色边框显示场景环绕的位置。

截至目前,玩家1和玩家2都在原始场景。

球员2正在右转,即将打入世界之路,将他移动到世界的左手边,但他还没有打进来。所以我需要一个场景的副本,使它在视觉上看起来像一个场景。由于玩家1仍然在原始场景,原始的发射器需要留在原地。玩家2将不得不在副本中看到相同的图像,否则一旦他通过该边框,将会发生“毛刺”效应,并且包装的错觉现在已经消失了。

最后结果:

我们刚刚说F %%%它,播放器1和播放器2将会看到不同的发射器节点,我们将在需要时将发射器附加到每个播放器的相机。

这只是工作(我猜想是这样),但我不知道多少是表演者,或者它如何适合你的需要和你当前的游戏。无论如何,也许它可以帮助你在某些方面。首先,在你的GameViewController …拆分屏幕:)
#import "GameViewController.h"
#import "GameScene.h"

@implementation GameViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Configure the view.
    SKView * leftSKView = (SKView *)self.leftScene;
    leftSKView.ignoresSiblingOrder = YES;
    leftSKView.showsFPS = YES;
    leftSKView.showsNodeCount = YES;

    SKView * rightSKView = (SKView *)self.rightScene;
    rightSKView.ignoresSiblingOrder = YES;
    rightSKView.showsFPS = YES;
    rightSKView.showsNodeCount = YES;




    // Create and configure the scene.
    GameScene *scene = [GameScene nodeWithFileNamed:@"GameScene"];
    scene.scaleMode = SKSceneScaleModeAspectFill;

    // Present the scene.
    [leftSKView presentScene:scene];
    [rightSKView presentScene:scene];

}

leftScene和rightScene是使用自动布局在故事板中定义的UIView,每个屏幕都占用一半的屏幕。另外一个类更改为SKView(它是UIView)。相当微不足道

然后在游戏场景中添加一个将在这两个视图之间共享的发射器。因为只使用一个发射器,所以发射的粒子(它们如何移动)将被镜像。所以在游戏场景中,只需添加一个粒子:

-(void)didMoveToView:(SKView *)view {
    /* Setup your scene here */


    SKEmitterNode *emitter =  [NSKeyedUnarchiver unarchiveObjectWithFile:[[NSBundle mainBundle] pathForResource:@"MyParticle" ofType:@"sks"]];
    emitter.position = CGPointMake(CGRectGetMidX(self.frame),CGRectGetMidX(self.frame));
    emitter.name = @"explosion";
    emitter.targetNode = self;
    [self addChild:emitter];
}

我知道你不需要所有这些代码,但如果这是你想要的某种方式,我会发布它为了完整。结果如下:

猜你在找的Swift相关文章