swift - 如何在 SpriteKit 中创建行波
问题描述
如何在 Swift SpriteKit 中创建这样的行波视觉效果?
我正在使用SKAction
在节点中执行振荡运动的扩展,但我仍然不知道如何创建轨迹。我虽然在创建副本,但它没有奏效。
extension SKAction {
static func oscillation(scene: SKScene, amplitude a: CGFloat, timePeriod t: CGFloat, midPoint: CGPoint) -> SKAction {
let action = SKAction.customAction(withDuration: Double(t)) { node, currentTime in
let displacement = a * sin(2 * .pi * currentTime / t)
node.position.y = midPoint.y + displacement
let copy = node.copy() as! SKSpriteNode
copy.position.x = node.position.x
copy.position.y = node.position.y
scene.addChild(copy)
}
return action
}
}
class GameScene: SKScene {
override func didMoveToView(view: SKView) {
let node = SKSpriteNode(color: UIColor.greenColor(), size: CGSize(width: 50, height: 50))
node.position = CGPoint(x: 25, y: size.height / 2)
self.addChild(node)
let oscillate = SKAction.oscillation(amplitude: 200, timePeriod: 1, midPoint: node.position)
node.runAction(SKAction.repeatActionForever(oscillate))
node.runAction(SKAction.moveByX(size.width, y: 0, duration: 5))
}
}
解决方案
我会尝试连接到移动节点的粒子发射器。它可以设置为足够快地产生点状粒子,使它们重叠并形成一条线。粒子将以恒定的速度向左移动,没有变化或褪色。将计数设置得足够高,以使最旧的粒子在消失之前消失。如果您不需要实线,则可以降低发射器速率并制作一条显示行波的虚线。粒子发射器中有很多选项,因此如果适合您的项目,您可以使用这些设置来获得其他效果。
推荐阅读
- html - Z-index 属性无法按预期将菜单始终放在其他 div 元素的顶部
- javascript - 在网页上看不到特定资源
- c# - 将列标题与从 c# 中的 datagridview 导出的文本文件中的单元格值对齐
- ruby-on-rails - 在层次结构中获取孩子、孙子
- javascript - 如何在此图表中添加另一列?
- linux - 在 Slackware 14.2 中安装 TCP Wrappers
- ponylang - 为 Pony 数组实现 map 函数
- python - 是否可以提取包含重复值的交集列表?
- sql - 尝试将不可为 NULL 的列的值设置为 NULL
- python - 将多个字典合并为一个