标签: skemitternode

如何将粒子效果添加到不是使用iOS 7 SpriteKit粒子的游戏的iOS应用程序?

我需要在我的应用程序中添加雨粒子效果,我一直很难找到实际执行这个想法的方法.

我尝试按照这个CALayer方法教程:链接, 但我不太确定这是否是最好的方法,考虑到Xcode 5中提供的新的iOS 7 SpriteKit粒子发射器.

我已经创建了.sks文件并且它在我的层次结构中,但我仍然无法将其添加到我的故事板/项目中.

话虽如此,我究竟如何在我的视图中添加SpriteKit粒子(sks)?我对SpriteKit框架中的场景,分层等并不熟悉,因为我不是游戏开发人员.我需要尽可能多的细节和示例代码,以便我能够解决这个问题

更新:我已按照SO成员答案中提供的指示:AyatollahAndy,请参阅下面的答案.虽然我能够SKSceneview收到任何触摸事件时显示我的应用程序崩溃.我得到以下内容:在此输入图像描述

谢谢

objective-c uiview ios sprite-kit skemitternode

34
推荐指数
3
解决办法
2万
查看次数

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

我需要有一个粒子发射器效果在2个点出现重复(为了分屏目的),我想知道是否有人遇到过这样做的方法.我的目标是在iOS 10上运行.这是我到目前为止所尝试的.

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

我留给真正发光的唯一选择是写我自己的粒子发射器,我试图避免,所以我想知道是否有其他人有这个问题,并知道一个解决方案,以达到预期的效果.

我能做的另一件事是预渲染发射器,但如果我走这条路线,这将占用大量纹理内存.

编辑:为了帮助可视化,我绘制了一张图片,白色边框显示了分屏的位置.黑色边框显示场景包装发生的位置. 在此输入图像描述

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

球员2正在向右走,即将击中一个世界包裹将他移到世界的左手边,但他还没有击中它.所以我需要有一个场景的副本,以便它在视觉上看起来像一个场景.由于播放器1仍在原始场景上,原始发射器需要保持原位.玩家2将不得不在副本中看到相同的图像,否则一旦他通过该边界,就会发生"毛刺"效果,现在包裹的幻觉消失了.

最后结果:

我们只是说F %%%它,播放器1和播放器2将查看不同的发射器节点,我们将在需要时将发射器连接到每个播放器相机.

sprite-kit skemitternode swift

23
推荐指数
1
解决办法
745
查看次数

使粒子遵循spriteKit中的路径

我创建了一个粒子,当我在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)

这就是它的样子.像一块白糖糖果.节点粒子遵循路径,但不是生成的粒子.

我用虚线表示了一个圆圈,这样你就可以看到它跟随的路径......

在此输入图像描述

有任何想法吗?

谢谢

iphone ipad ios sprite-kit skemitternode

17
推荐指数
1
解决办法
6138
查看次数

你如何阻止粒子效应?(SKEmitterNode)

我目前在碰撞语句中有这个代码,如果与对象发生碰撞,那么这个粒子会发生,但我该怎么做呢?因为它永远持续下去,而我只希望每次接触发生几次

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)

particles sprite-kit skemitternode

16
推荐指数
2
解决办法
8882
查看次数

无法在iOS9中暂停SKEmitterNode

我尝试了一些解决方法,但仍然无法暂停现有的粒子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)

它没有用,实际上这应该在场景暂停时自动完成(发射器被添加到场景中).这是尝试的另一件事是设置 …

objective-c particles sprite-kit skemitternode ios9

15
推荐指数
1
解决办法
603
查看次数

如何用Spritekit实现这个动画?

题:

如何用Spritekit实现这个动画?

在此输入图像描述

我做了什么:

在此输入图像描述

问题:

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

在此输入图像描述

2)如何从视图中逐渐删除实心橙色线(我的突然过度)?

3)需要调整.sks文件属性.

4)/sf/ask/2085471041/

这是我的代码:

#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)

objective-c calayer sprite-kit skemitternode

14
推荐指数
1
解决办法
516
查看次数

如何在iOS7中使用SpriteKit添加粒子

我想在我的SpriteKit应用程序中添加一个粒子,但我找不到怎么做.我可以使用粒子编辑器创建,但如何将它们添加到我的视图中?

非常感谢提前!

particles ios7 sprite-kit skemitternode

13
推荐指数
1
解决办法
7989
查看次数

使用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)

path particles sprite-kit skemitternode swift

13
推荐指数
1
解决办法
1675
查看次数

暂停/取消暂停时SKEmitterNode间隙

每当我SKEmitterNode暂停/取消暂停时(例如当应用程序背景/前置时),粒子中存在不自然的间隙.暂停时本应移动的所有粒子似乎都会在未取消时被叠加并释放.

我有一个示例项目,准确显示正在发生的事情,这是一个它的GIF.

发射器暂停gif

编辑:

这是iOS9和tvOS中的一个错误,并且已经向Apple提交了错误报告.感谢@WangYudong和@ Ben-Kane的帮助.

ios sprite-kit skemitternode

9
推荐指数
1
解决办法
129
查看次数

使用SpriteKit中的SKEmitterNode和粒子创建跟踪

我试图让它变成这样一个粒子,只要玩家被移动,我就会跟随玩家.我试图复制的效果就像你在网站上,并且他们有一些跟随你的鼠标的对象.我尝试通过使粒子移动玩家所做的数量来做到这一点,但它没有再现预期的效果.有什么建议?我的代码:

声明粒子

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)

particles sprite-kit sknode skemitternode

8
推荐指数
1
解决办法
4282
查看次数

标签 统计

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