2

我正在尝试使用 SKEmitterNode 创建一个着色器,有点像在洞穴中的口袋妖怪: http ://www.serebii.net/pokearth/maps/johto-hgss/38-route31.png

这是我到目前为止的代码:

NSString *burstPath =
  [[NSBundle mainBundle] pathForResource:@"MyParticle" ofType:@"sks"];

  SKNode *area = [[SKNode alloc] init];

  SKSpriteNode *background = [SKSpriteNode spriteNodeWithColor:[SKColor blackColor] size:CGSizeMake(self.frame.size.width, self.frame.size.width)];
  background.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame));

  SKEmitterNode *burstNode =
  [NSKeyedUnarchiver unarchiveObjectWithFile:burstPath];
  burstNode.position = CGPointMake(CGRectGetMidX(self.frame),CGRectGetMidY(self.frame));

  burstNode.particleBlendMode = SKBlendModeSubtract;
  [area addChild:background];
  [area addChild:burstNode];
  [self addChild:area];

这是 SKEmitterNode:http ://postimg.org/image/60zflqjzt/

我有两个想法。第一个是创建一个矩形 SKSpriteNode 并从矩形 SKSpriteNode 中删除 SKEmitterNode。这样,我们就有了一个黑色的矩形,中间有一个“洞”,我们可以看穿它。

第二个是将矩形SKSpriteNode和SKEmitter节点添加到另一个SKNode(区域),然后设置SKEmitterNode的particleBlendMode,最后在颜色函数中设置SKNode(区域)的alpha。例如,如果一个像素的颜色为黑色,则该像素的 alpha 值为 1.0,而另一个像素为白色,则其他像素的 alpha 值为 0.0。

这个问题可能与How to create an alpha mask in iOS using sprite kit在某些方面重复,但由于没有给出好的答案,我认为这不是问题。

非常感谢。

4

2 回答 2

2

这些不是您要查找的节点!;)

粒子不能用来制造战争迷雾,即使你可以让它们表现出产生战争迷雾的行为,它也会非常缓慢。

根据链接的屏幕截图,您实际上只需要一个带有“洞”的图像,一个透明区域。图像应该是屏幕大小的,并且只需将边框覆盖到您需要的程度。这将是一种不显眼的战争迷雾,或者更确切地说,只是玩家周围的黑暗效果。

一个真正的战争迷雾实现,你发现世界区域通常使用一种模式,最简单的形式就是移除(淡出)矩形黑色精灵。

于 2014-06-21T14:51:31.187 回答
0

现在,有了这个时代的强大设备(iPhone 12),可以使用“ SKEmitterNode”而不会每秒丢失太多帧。您必须使用此图像构建一个SKS(SpriteKit 粒子文件): 在此处输入图像描述

然后,像这张图片一样设置你的变量:

在此处输入图像描述

因此,转到您的代码并使用以下示例添加您的粒子:

let fog = SKEmitterNode(fileNamed: "fog")
fog.zPosition = 6
self.addChild(fog)
fog.position.y = self.frame.midY
fog.particlePositionRange.dx = self.size.width * 2.5
于 2020-12-01T13:40:32.613 回答