【发布时间】:2020-01-03 23:42:24
【问题描述】:
我使用粒子发射器创建了带有星星的背景。看起来不错,但我希望它们闪烁或闪烁。我得到的最接近的是当我更改birthrate 和lifetime 变量时,粒子会消失并出现在不同的位置。不过,我希望粒子保持在同一个地方并随机淡入淡出。关于如何做到这一点的任何想法?这是我到目前为止所得到的:
【问题讨论】:
标签: sprite-kit particles skemitternode
我使用粒子发射器创建了带有星星的背景。看起来不错,但我希望它们闪烁或闪烁。我得到的最接近的是当我更改birthrate 和lifetime 变量时,粒子会消失并出现在不同的位置。不过,我希望粒子保持在同一个地方并随机淡入淡出。关于如何做到这一点的任何想法?这是我到目前为止所得到的:
【问题讨论】:
标签: sprite-kit particles skemitternode
我认为你不能直接在编辑器中做很多事情。如果您习惯使用用于调整发射器的代码,则有两种可能性:设置粒子动作以设置颜色或 alpha 或缩放或纹理的动画,或自定义着色器以执行任何类型的动画。 (我假设基于您的图片具有基本上无限的生命周期,您不希望事物移动或消失。这可能会排除关键帧,但可能将关键帧序列设置为重复模式,帧间隔非常小会工作的。)
由于位置是静态的,另一种可能性是让一些固定的精灵随机散布在周围,并让它们运行动作来为它们设置动画。我们之前使用过这种方法,在有一堆暗星的背景下使用了大约 100 个动画精灵,它看起来相当不错。大致如下:
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 这样的粒子动作。我不明白你如何改变粒子的相对周期,尽管你可以像使用单独的精灵一样,唯一的偏移来自粒子出生时间的差异。
【讨论】: