如何使用 SceneKit 使用缩放效果使粒子图像变大?
How to make a particle image bigger with a scale effect with SceneKit?
我正在寻找与我们在 SpriteKit
中对发射器粒子的相同效果,scale
效果可以根据时间使粒子图像变大或变小。 (例如,一个简单的红色圆圈,变大并在 1 秒后消失。)我找不到与 SpriteKit
中相同的 scale
选项。图像可以变大,也可以保持变大,但不会随时间变化。
有人知道这样做的好方法吗?
谢谢
编辑:
None 这些尝试成功了,你知道为什么吗?
func addParticleSceneKit(){
println("add")
var fire = SCNParticleSystem(named: "circle1.scnp", inDirectory: "art.scnassets/Particles")
fire.particleSize = 5
emitter.addParticleSystem(fire) //emitter is a SCNNode
/*
let bigger = SCNAction.runBlock { (node) -> Void in
dispatch_async(dispatch_get_main_queue(), { () -> Void in
SCNTransaction.setAnimationDuration(1)
fire.propertyControllers = [SCNParticlePropertySize : 10.0]
})
}
emitter.runAction(bigger)
*/
//SCNTransaction.begin()
//SCNTransaction.setAnimationDuration(1)
//fire.propertyControllers = [SCNParticlePropertySize : 10.0]
//SCNTransaction.commit()
}
SCNParticleSystem 具有类似
的属性
// Specifies the initial size of the particle. Animatable.
@property(nonatomic) CGFloat particleSize;
// Specifies the initial size variation of the particle. Animatable.
@property(nonatomic) CGFloat particleSizeVariation;
如果您需要更多控制,您还可以为键 "SCNParticlePropertySize" 提供您自己的粒子 属性 控制器。例如,指定大小在粒子生命周期内的动画效果。
见
// Property controllers.
// The keys for this directionary are listed in the "Particle Properties Name" section.
// The values are instances of SCNParticlePropertyController
@property(nonatomic, copy) NSDictionary *propertyControllers;
哇。哇哦。您在墙上扔了很多代码只是为了看看有什么用,但是您看过文档了吗?
SCNParticlePropertyController
's initializer 的方法描述包括一个代码示例,它几乎完全符合您的要求 — 它为粒子大小设置动画。转载于此:
// 1. Create and configure an animation object.
let animation = CAKeyframeAnimation()
animation.values = [ 0.1, 1.0, 3.0, 0.5 ]
// 2. Create a property controller from the animation object.
let sizeController = SCNParticlePropertyController(animation: animation)
// 3. Assign the controller to a particle system, associating it with a particle property.
particleSystem.propertyControllers = [ SCNParticlePropertySize: sizeController ]
如果您只需要起始尺寸和起始尺寸而不是关键帧,则可以在步骤 1 中使用 CABasicAnimation
。
我正在寻找与我们在 SpriteKit
中对发射器粒子的相同效果,scale
效果可以根据时间使粒子图像变大或变小。 (例如,一个简单的红色圆圈,变大并在 1 秒后消失。)我找不到与 SpriteKit
中相同的 scale
选项。图像可以变大,也可以保持变大,但不会随时间变化。
有人知道这样做的好方法吗?
谢谢
编辑:
None 这些尝试成功了,你知道为什么吗?
func addParticleSceneKit(){
println("add")
var fire = SCNParticleSystem(named: "circle1.scnp", inDirectory: "art.scnassets/Particles")
fire.particleSize = 5
emitter.addParticleSystem(fire) //emitter is a SCNNode
/*
let bigger = SCNAction.runBlock { (node) -> Void in
dispatch_async(dispatch_get_main_queue(), { () -> Void in
SCNTransaction.setAnimationDuration(1)
fire.propertyControllers = [SCNParticlePropertySize : 10.0]
})
}
emitter.runAction(bigger)
*/
//SCNTransaction.begin()
//SCNTransaction.setAnimationDuration(1)
//fire.propertyControllers = [SCNParticlePropertySize : 10.0]
//SCNTransaction.commit()
}
SCNParticleSystem 具有类似
的属性// Specifies the initial size of the particle. Animatable.
@property(nonatomic) CGFloat particleSize;
// Specifies the initial size variation of the particle. Animatable.
@property(nonatomic) CGFloat particleSizeVariation;
如果您需要更多控制,您还可以为键 "SCNParticlePropertySize" 提供您自己的粒子 属性 控制器。例如,指定大小在粒子生命周期内的动画效果。
见
// Property controllers.
// The keys for this directionary are listed in the "Particle Properties Name" section.
// The values are instances of SCNParticlePropertyController
@property(nonatomic, copy) NSDictionary *propertyControllers;
哇。哇哦。您在墙上扔了很多代码只是为了看看有什么用,但是您看过文档了吗?
SCNParticlePropertyController
's initializer 的方法描述包括一个代码示例,它几乎完全符合您的要求 — 它为粒子大小设置动画。转载于此:
// 1. Create and configure an animation object.
let animation = CAKeyframeAnimation()
animation.values = [ 0.1, 1.0, 3.0, 0.5 ]
// 2. Create a property controller from the animation object.
let sizeController = SCNParticlePropertyController(animation: animation)
// 3. Assign the controller to a particle system, associating it with a particle property.
particleSystem.propertyControllers = [ SCNParticlePropertySize: sizeController ]
如果您只需要起始尺寸和起始尺寸而不是关键帧,则可以在步骤 1 中使用 CABasicAnimation
。