Swift SpriteKit:为背景着色
我仍在努力学习Swift和SpriteKit,我有一个新问题 因此,我将关注本教程/视频: 我的项目现在看起来像这样: 我有100个左右移动的粒子对象,我想混合一些颜色的粒子到白色背景。在本教程中,它非常简单。只需创建一次背景,然后在draw函数(在SpriteKit中,这将是update()函数)中为对象指定一个alpha值,如0.1 SpriteKit的工作原理完全不同。如果我更改“绘制”下的alpha值,我的粒子现在几乎隐藏,但颜色不会在背景上“绘制” 我知道这是因为SpriteKit的工作原理与用于javascript的p5库不同。但我想知道我怎么能在SpriteKit中获得同样的效果 所以在update函数中有两个循环,一个用于列,一个用于行。我有x列和y行,我为每个“单元”创建一个随机CGVector。现在,我的粒子是根据离粒子位置最近的单元的CGV矢量移动的 我的粒子类如下所示:Swift SpriteKit:为背景着色,swift,colors,sprite-kit,swift3,skspritenode,Swift,Colors,Sprite Kit,Swift3,Skspritenode,我仍在努力学习Swift和SpriteKit,我有一个新问题 因此,我将关注本教程/视频: 我的项目现在看起来像这样: 我有100个左右移动的粒子对象,我想混合一些颜色的粒子到白色背景。在本教程中,它非常简单。只需创建一次背景,然后在draw函数(在SpriteKit中,这将是update()函数)中为对象指定一个alpha值,如0.1 SpriteKit的工作原理完全不同。如果我更改“绘制”下的alpha值,我的粒子现在几乎隐藏,但颜色不会在背景上“绘制” 我知道这是因为SpriteKit的工
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个粒子在白色背景节点上真正“绘制”它们的形状和颜色。我想知道在你的应用程序开始滞后之前,你最多可以有多少个粒子?请记住,一个SKShapeNode需要一个draw调用,这是非常不好的。关于这个问题。。。您还没有展示您尝试了什么以及您得到了什么结果(可能是一些截图?)您尝试了什么?嗨@Whirlwind谢谢您的回复。我已经编辑了我的问题。blendMode不是问题所在。我想有100个粒子,它们在周围移动,并用它们的形状和颜色给白色背景节点着色——所以当我说“绘制”时,我的意思是它们在背景上绘制。我不想创建新的节点,这些节点不会移动,即使这会让我产生效果-就像你说的那样,这会导致性能问题。对不起,我的英语不好,我希望我的问题现在更清楚,再次感谢您的回答。您应该能够应用对单个粒子起作用的着色器,请参见此链接上的示例Spritek它有自己的粒子系统。如果这对你来说还不够的话,我想使用着色器将是一个不错的选择…几乎做到了。。但这需要付出很多代价。希望SpriteKit有一种方法可以简单地画一些东西而不创建对象。想知道p5库如何在没有任何性能问题的情况下工作。我想知道在你的应用程序开始滞后之前,你的最大粒子数是多少?请记住,一个SKShapeNode需要一个draw调用,这是非常不好的。关于这个问题。。。您还没有展示您尝试了什么以及您得到了什么结果(可能是一些截图?)您尝试了什么?嗨@Whirlwind谢谢您的回复。我已经编辑了我的问题。blendMode不是问题所在。我想有100个粒子,它们在周围移动,并用它们的形状和颜色给白色背景节点着色——所以当我说“绘制”时,我的意思是它们在背景上绘制。我不想创建新的节点,这些节点不会移动,即使这会让我产生效果-就像你说的那样,这会导致性能问题。对不起,我的英语不好,我希望我的问题现在更清楚,再次感谢您的回答。您应该能够应用对单个粒子起作用的着色器,请参见此链接上的示例Spritek它有自己的粒子系统。如果这对你来说还不够的话,我想使用着色器将是一个不错的选择…几乎做到了。。但这需要付出很多代价。希望SpriteKit有一种方法可以简单地画一些东西而不创建对象。想知道p5库如何在没有任何性能问题的情况下工作。