我需要在我的应用程序中添加雨粒子效果,我一直很难找到实际执行这个想法的方法.
我尝试按照这个CALayer方法教程:链接, 但我不太确定这是否是最好的方法,考虑到Xcode 5中提供的新的iOS 7 SpriteKit粒子发射器.
我已经创建了.sks文件并且它在我的层次结构中,但我仍然无法将其添加到我的故事板/项目中.
话虽如此,我究竟如何在我的视图中添加SpriteKit粒子(sks)?我对SpriteKit框架中的场景,分层等并不熟悉,因为我不是游戏开发人员.我需要尽可能多的细节和示例代码,以便我能够解决这个问题
更新:我已按照SO成员答案中提供的指示:AyatollahAndy,请参阅下面的答案.虽然我能够SKScene在view收到任何触摸事件时显示我的应用程序崩溃.我得到以下内容:
谢谢
我需要有一个粒子发射器效果在2个点出现重复(为了分屏目的),我想知道是否有人遇到过这样做的方法.我的目标是在iOS 10上运行.这是我到目前为止所尝试的.
targetNode给一个SKNode然后复制SKNode每一帧:targetNode对我来说在iOS 10中不起作用. SKNode,并使用view.textureFromNode纹理来复制每一帧:占用帧的1/120,对我来说太慢了. SKNode:操作不会在iOS 10上运行 我留给真正发光的唯一选择是写我自己的粒子发射器,我试图避免,所以我想知道是否有其他人有这个问题,并知道一个解决方案,以达到预期的效果.
我能做的另一件事是预渲染发射器,但如果我走这条路线,这将占用大量纹理内存.
编辑:为了帮助可视化,我绘制了一张图片,白色边框显示了分屏的位置.黑色边框显示场景包装发生的位置.

截至目前,玩家1和玩家2都在原始场景中.
球员2正在向右走,即将击中一个世界包裹将他移到世界的左手边,但他还没有击中它.所以我需要有一个场景的副本,以便它在视觉上看起来像一个场景.由于播放器1仍在原始场景上,原始发射器需要保持原位.玩家2将不得不在副本中看到相同的图像,否则一旦他通过该边界,就会发生"毛刺"效果,现在包裹的幻觉消失了.
最后结果:
我们只是说F %%%它,播放器1和播放器2将查看不同的发射器节点,我们将在需要时将发射器连接到每个播放器相机.
我创建了一个粒子,当我在Xcode的属性窗口上测试它时,它看起来像这样:

我已将此粒子添加到场景中,制作了一个圆圈,并使用此方法强制粒子运行该圆圈:
NSString *myParticlePath = [[NSBundle mainBundle] pathForResource:@"particle" ofType:@"sks"];
SKEmitterNode *myParticle = [NSKeyedUnarchiver unarchiveObjectWithFile:myParticlePath];
[self addChild:myParticle];
CGPathRef circle = CGPathCreateWithEllipseInRect(CGRectMake(0,0,400,400), NULL);
SKAction *followTrack = [SKAction followPath:circle asOffset:NO orientToPath:YES duration:1.0];
SKAction *forever = [SKAction repeatActionForever:followTrack];
[myParticle runAction:forever];
Run Code Online (Sandbox Code Playgroud)
这就是它的样子.像一块白糖糖果.节点粒子遵循路径,但不是生成的粒子.
我用虚线表示了一个圆圈,这样你就可以看到它跟随的路径......

有任何想法吗?
谢谢
我目前在碰撞语句中有这个代码,如果与对象发生碰撞,那么这个粒子会发生,但我该怎么做呢?因为它永远持续下去,而我只希望每次接触发生几次
SKEmitterNode *emitter = [NSKeyedUnarchiver unarchiveObjectWithFile:[[NSBundle mainBundle] pathForResource:@"ff" ofType:@"sks"]];
emitter.zPosition = 0;
emitter.particlePositionRange = CGVectorMake(0, self.size.height);
emitter.position = CGPointMake(self.size.width, self.size.height/2);
[self addChild:emitter];
Run Code Online (Sandbox Code Playgroud) 我尝试了一些解决方法,但仍然无法暂停现有的粒子iOS9.我正在使用以下技术来暂停场景:
self.paused = YES;globalPause = YES;变量来控制update:方法执行(因为update:在场景暂停时仍然运行).关键是我不会暂停视图,而是暂停视野.因为这个原因,我不会暂停视图.
以下是可以重现此问题的代码iOS9:
#import "GameScene.h"
@interface GameScene ()
@property (nonatomic, strong)SKEmitterNode *emitter;
@end
@implementation GameScene
-(void)didMoveToView:(SKView *)view {
[self addChild:[self getSpaceDustEmitter]];
}
//No need for this method though :)
-(SKEmitterNode*)getSpaceDustEmitter{
self.emitter = [NSKeyedUnarchiver unarchiveObjectWithFile:[[NSBundle mainBundle] pathForResource:@"spacedust" ofType:@"sks"]];
self.emitter .name = @"emitter_spacedust";
self.emitter .position = CGPointMake(CGRectGetMidX(self.frame),self.frame.size.height);
return self.emitter ;
}
@end
Run Code Online (Sandbox Code Playgroud)
因此,非常简单的例子可以工作,iOS8而不是按预期工作iOS9.会发生什么事情,即使一切看起来都是暂停的,也不是.如果场景未暂停,则取消暂停后的现有粒子移动到它们应该的位置.此外,看起来粒子也会继续产卵,如果暂停时间过长,这会导致明显滞后...
这是粒子编辑器的截图:
有人有一些合理的解释吗?到目前为止,我已经尝试明确暂停发射器:
emitterNode.paused = YES;
Run Code Online (Sandbox Code Playgroud)
它没有用,实际上这应该在场景暂停时自动完成(发射器被添加到场景中).这是尝试的另一件事是设置 …
题:
如何用Spritekit实现这个动画?

我做了什么:

问题:
1)我可以绘制所有四个花瓣,但是一旦我抬起手指画圆圈,它仍然会从前一点创建一条线,在那里我将手指抬起到新的触摸开始点.请参考下面的gif:

2)如何从视图中逐渐删除实心橙色线(我的突然过度)?
3)需要调整.sks文件属性.
这是我的代码:
#import "GameScene.h"
@interface GameScene()
@property (nonatomic) SKEmitterNode* fireEmmitter;
@property (nonatomic) SKEmitterNode* fireEmmitter2;
@end
@implementation GameScene
NSMutableArray *_wayPoints;
NSTimer* myTimer;
-(void)didMoveToView:(SKView *)view {
_wayPoints = [NSMutableArray array];
//Setup a background
self.backgroundColor = [UIColor blackColor];
//setup a fire emitter
NSString *fireEmmitterPath = [[NSBundle mainBundle] pathForResource:@"magic" ofType:@"sks"];
_fireEmmitter = [NSKeyedUnarchiver unarchiveObjectWithFile:fireEmmitterPath];
_fireEmmitter.position = CGPointMake(self.frame.size.width/2, self.frame.size.height/2 - 200);
_fireEmmitter.name = @"fireEmmitter";
_fireEmmitter.zPosition = 1;
_fireEmmitter.targetNode = self;
_fireEmmitter.particleBirthRate = 0;
[self addChild: _fireEmmitter];
//setup …Run Code Online (Sandbox Code Playgroud) 我想在我的SpriteKit应用程序中添加一个粒子,但我找不到怎么做.我可以使用粒子编辑器创建,但如何将它们添加到我的视图中?
非常感谢提前!
我正在使用Swift,Sprite Kit和Xcode 6,
我想在SpriteKit中创建一个粒子效果,有点像iOS游戏中名为"Duet"的球的粒子效果,但我不知道如何继续,我设法创建一个粒子效果,但不是像这个游戏中的粒子跟随节点并绘制节点的路径......
这是我的代码:
let firstCircle = SKSpriteNode(imageNamed: "Circle")
let particle = SKEmitterNode(fileNamed: "FirstParticle.sks")
override func didMoveToView(view: SKView)
{
firstCircle.physicsBody = SKPhysicsBody(circleOfRadius: 7)
firstCircle.physicsBody?.affectedByGravity = false
particle.targetNode = firstCircle
addChild(firstCircle)
addChild(particle)
}
override func touchesBegan(touches: NSSet, withEvent event: UIEvent)
{
for touch: AnyObject in touches
{
firstCircle.position = touch.locationInNode(self)
}
}
override func touchesMoved(touches: NSSet, withEvent event: UIEvent)
{
for touch: AnyObject in touches
{
firstCircle.position = touch.locationInNode(self)
}
}
Run Code Online (Sandbox Code Playgroud) 每当我SKEmitterNode暂停/取消暂停时(例如当应用程序背景/前置时),粒子中存在不自然的间隙.暂停时本应移动的所有粒子似乎都会在未取消时被叠加并释放.
我有一个示例项目,准确显示正在发生的事情,这是一个它的GIF.

这是iOS9和tvOS中的一个错误,并且已经向Apple提交了错误报告.感谢@WangYudong和@ Ben-Kane的帮助.
我试图让它变成这样一个粒子,只要玩家被移动,我就会跟随玩家.我试图复制的效果就像你在网站上,并且他们有一些跟随你的鼠标的对象.我尝试通过使粒子移动玩家所做的数量来做到这一点,但它没有再现预期的效果.有什么建议?我的代码:
声明粒子
NSString *myParticlePath = [[NSBundle mainBundle] pathForResource:@"trail" ofType:@"sks"];
self.trailParticle = [NSKeyedUnarchiver unarchiveObjectWithFile:myParticlePath];
self.trailParticle.position = CGPointMake(0,0);
[self.player addChild:self.trailParticle];
Run Code Online (Sandbox Code Playgroud)
移动方法
-(void)dragPlayer: (UIPanGestureRecognizer *)gesture {
if (gesture.state == UIGestureRecognizerStateChanged) {
//Get the (x,y) translation coordinate
CGPoint translation = [gesture translationInView:self.view];
//Move by -y because moving positive is right and down, we want right and up
//so that we can match the user's drag location (SKView rectangle y is opp UIView)
CGPoint newLocation = CGPointMake(self.player.position.x + translation.x, self.player.position.y - translation.y);
CGPoint newLocPart = …Run Code Online (Sandbox Code Playgroud) skemitternode ×10
sprite-kit ×10
particles ×5
ios ×3
objective-c ×3
swift ×2
calayer ×1
ios7 ×1
ios9 ×1
ipad ×1
iphone ×1
path ×1
sknode ×1
uiview ×1