我仍然尝试学习Swift和SpriteKit,我有一个新问题。
所以我正在关注本教程/视频:Noise Field
我的项目现在看起来像这样:My Project
我有100个粒子物体四处移动,我想将一些颜色的粒子混合到白色背景中。在教程内部,它很安静。你只需创建一次背景,并在绘图函数内部(在SpriteKit中这将是update()函数)你给对象一个像0.1这样的alpha值。
SpriteKit工作安静不同。如果我在绘制下更改alpha值,我的粒子现在几乎被隐藏了,但颜色没有在背景上“绘制”。
我知道这是因为SpriteKit与javascript的p5库不同。但我想知道如何在SpriteKit中获得相同的效果..
因此在更新函数中我有2个循环,一个用于列,一个用于行。我有x列和y行 - 对于每个“单元格”,我创建一个随机的CGVector。现在,我的粒子基于最靠近粒子位置的单元格的CGVector移动。
My Particle Class看起来像这样:
class Particle: SKShapeNode{
var pos = CGPoint(x: 0, y: 0)
var vel = CGVector(dx: 0, dy: 0)
var acc = CGVector(dx: 0, dy: 0)
var radius:CGFloat
var maxSpeed:CGFloat
var color: SKColor
我有一个看起来像这样的功能来显示粒子:
func show(){
self.position = self.pos
let rect = CGRect(origin: CGPoint(x: 0.5, y: 0.5), size: CGSize(width: self.radius*2, height: self.radius*2))
let bezierP = UIBezierPath(ovalIn: rect)
self.path = bezierP.cgPath
self.fillColor = self.color
self.strokeColor = .clear
}
在更新功能中我有这个循环:
for particle in partikelArr{
particle.updatePos()
particle.show()
}
我现在如何“着色”白色背景或根据粒子的位置,颜色,形状和大小在背景上“绘制”我的粒子?
谢谢和最好的问候
编辑: 所以我知道在每个粒子中为更新函数创建一个新的SKShapeNode,这样就可以了,看起来像粒子已经为背景着色了:
这是在更新功能中创建的:
for particle in partikelArr{
let newP = SKShapeNode(path: particle.path!)
newP.position = particle.pos
newP.fillColor = particle.farbe
newP.strokeColor = .clear
newP.zPosition = 1000
newP.alpha = 0.1
self.addChild(newP)
}
但我不希望为每个粒子创建SKShapeNodes(在屏幕截图中我使用了5个粒子,几秒钟后我已经在场景中拥有超过800个节点)。 我想让我的100个粒子在白色背景节点上真正“绘制”它们的形状和颜色。