首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用SKEmitterNode创建闪烁效果?

如何使用SKEmitterNode创建闪烁效果?
EN

Stack Overflow用户
提问于 2020-01-03 23:42:24
回答 1查看 216关注 0票数 0

我用粒子发射器创造了一个恒星背景。看起来没问题,但我希望他们眨眼,或闪烁。我得到的最接近的是,当我改变birthratelifetime变量,使粒子消失,并出现在不同的地方。我希望粒子保持在相同的位置,然后随机地淡入淡出。对怎么做有什么想法吗?到目前为止,这就是我所得到的:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-04 12:32:52

我不认为你能在编辑中直接做很多事。如果你很乐意使用代码来调整发射器,你有几种可能:设置一个粒子动作来动画颜色、α、比例或纹理,或者定制着色器来做任何类型的动画。(我假设,根据你的照片,基本上是无限的生命,你不想东西移动或消失。这可能排除了关键帧,但可能将关键帧序列设置为重复模式,并将帧间隔为非常小的值。)

另一种可能性,因为位置是静态的,将只是使一些固定的精灵散落在随机,并让他们运行动作,以动画他们。我们以前使用过这种方法,在一个背景下使用了~100个动画精灵,背景上有一堆更暗的星星,而且看起来很不错。类似于这样的东西:

代码语言:javascript
复制
let twinklePeriod = 8.0
let twinkleDuration = 0.5
let bright = CGFloat(0.3)
let dim = CGFloat(0.1)
let brighten = SKAction.fadeAlpha(to: bright, duration: 0.5 * twinkleDuration)
brighten.timingMode = .easeIn
let fade = SKAction.fadeAlpha(to: dim, duration: 0.5 * twinkleDuration)
fade.timingMode = .easeOut
let twinkle = SKAction.repeatForever(.sequence([brighten, fade, .wait(forDuration: twinklePeriod - twinkleDuration)]))
for _ in 0 ..< 100 {
  let star = SKSpriteNode(imageNamed: "star")
  star.position = CGPoint(x: .random(in: minX ... maxX), y: .random(in: minY ... maxY))
  star.alpha = dim
  star.speed = .random(in: 0.5 ... 1.5)
  star.run(.sequence([.wait(forDuration: .random(in: 0 ... twinklePeriod)), twinkle]))
  addChild(star)
}

这是从不同的部分剪切和粘贴,并简化了一些,所以可能有排字,但它应该提供的想法。如果你保持发射器,你可以尝试像上面的twinkle作为粒子的作用。我不知道你怎么能改变粒子的相对周期,尽管你可以用不同的精灵来改变,唯一的补偿来自粒子出生时间的不同。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59586630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档