SpriteKit:为背景着色

时间:2017-03-03 01:08:09

标签: swift colors sprite-kit swift3 skspritenode

我仍然尝试学习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,这样就可以了,看起来像粒子已经为背景着色了: Working Example

这是在更新功能中创建的:

    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个粒子在白色背景节点上真正“绘制”它们的形状和颜色。

0 个答案:

没有答案