SpriteKit代码动态调整sks文件中粒子的颜色

在Xcode中我们可以很方便的使用粒子模板制作粒子,然后保存为sks文件,这样我们随时就可以在代码中使用它们了:

if let fireParticles = SKEmitterNode(fileNamed: "FireParticles"){
    //do anything you want!!!
}

我们想要制作的效果是当小球调入时间空隙时显示被吞噬的粒子效果,不过sks文件中的粒子消逝效果是粉色烟雾的,但是小球有7种颜色:

我当然可以依次制作7个sks粒子文件对应每个球的颜色,但显然这违反了KISS原则.更好的做法是用代码调整不同颜色的小球消逝时产生对应颜色的烟雾,而不是都是粉色滴,那么单调 ;(

我们打开Xcode的粒子编辑器界面,可以发现其中有一个Color Ramp属性:

它对应于粒子对象的particleColor的属性,如果我们直接在代码中修改它可以实现改变粒子颜色吗?答案是:不可以!

原因在此:

The particleColor property isn‘t working because of the color ramp settings in the Particle Editor. These are actually stored in the particleColorSequence, which ignores all other particle color properties.

So, to make it work, you need to override the particleColorSequence setter and make it nil first. Then, you need to set the particleColorBlendFactor to fully blend your chosen color with the particle texture (full blending is 1.0). From then on, any explicit particle color setting should work:

emitter.particleColorSequence = nil;
emitter.particleColorBlendFactor = 1.0;
emitter.particleColor = [SKColor redColor];

各位看官都很清楚了吧?如果少数不明所以的吃瓜群众一脸朦胧状,请跟帖或私信 ;)

上面是Objc的代码,我们把它改为Swift:

//["ballBlue","ballCyan","ballGreen","ballGrey","ballPurple","ballRed","ballYellow"]
    func destroyBall(_ ball:SKNode){

        if let fireParticles = SKEmitterNode(fileNamed: "FireParticles"){
            fireParticles.position = ball.position

            let imageName = ball.userData!["imageName"] as! String
            var particelColor:UIColor
            switch imageName {
            case "ballBlue":
                particelColor = .blue
            case "ballCyan":
                particelColor = .cyan
            case "ballGreen":
                particelColor = .green
            case "ballGrey":
                particelColor = .gray
            case "ballPurple":
                particelColor = .purple
            case "ballRed":
                particelColor = .red
            case "ballYellow":
                particelColor = .yellow
            default:
                fatalError("非法的颜色名称!!!")
            }

            fireParticles.particleColorSequence = nil
            fireParticles.particleColorBlendFactor = 1.0
            fireParticles.particleColor = particelColor

            addChild(fireParticles)
        }

        ball.removeFromParent()
    }

哦了!我们成功的完成了题目的要求(gif动图加载较慢):

时间: 2024-10-11 17:28:41

SpriteKit代码动态调整sks文件中粒子的颜色的相关文章

myeclipse解决JSP文件中script背景颜色的调整

1导入MyEclipse的主题后,打开jsp或者html文件,jsvascript部分就蒙受上了一层白色,弄不掉了.症状如下: 解决办法如下 myeclipse解决JSP文件中script背景颜色的调整,布布扣,bubuko.com

【转】如何使用代码动态设置水晶报表中的文本,字段等对象呢?

http://www.cnblogs.com/star250/archive/2008/12/22/1359810.html 如何使用代码动态设置水晶报表中的文本,字段等对象呢? //VB 首先,你必须要声明一个OBJECT变量(eg. TextObject, FieldObject, ......),当然不是一般的对象,而是:    Dim xObject As CrystalDecisions.CrystalReports.Engine.FieldObject(字段)    Dim xObj

将类的定义放在头文件中,把成员函数的实现代码放在一个cpp文件中

写这种.h和.cpp文件分开的大程序,虽然对很多人来说很简单,对自己来说算是第一次吧,好好学C++,加油~ 题目:定义Point类,由Point派生出Circle类,再由Circle派生出Cylinder类.将类的定义部分分别作为3个头文件,对他们的成员函数的定义分别作为3个源文件 1.Point.h文件 1 #ifndef POINT_H 2 #define POINT_H 3 #include<iostream> //头文件也需要包含这个 4 using namespace std; 5

maven 根据P参数值打包动态修改properties文件中值或一定properties

由于本人 最近忙着公司事情,昨天没有写博客,今天就继续写吧 需求:由于最近开发clover项目 ,没有使用spring,更没有使用任何框架,而使用J2EE的web工程,所以连接ZK和MongoDB.Redis等服务器需用指定properties文件, 而目前公司又分各套环境(dev.test.product),所以希望打包的时候 根据profile id 来动态使用不同环境properties文件 或者动态修改properties参数值 方法一:使用一套properties配置文件,但具体参数使

动态修改css文件中,具体的class中的个别属性值。

//修改class的属性值 //javascript方式 function setCssClassProperty(pSheetObj,pClassName,pProperty,pValue) { var rules = pSheetObj.sheet.cssRules; var rule; var selectorText; for (i = 0; i < rules.length; i++) { rule = rules[i]; selectorText = rule.selectorTex

【转】如何调整CHM文件中的字体!非常有爱!

原文网址:http://www.cnblogs.com/lijh_ray/archive/2011/01/25/1944668.html 如果html中字体大小是用像素px来定义,那么在IE中无法调整字体大小.chm同IE一样,所以对于不得不长时间坐在屏幕前的我们是件很痛苦的事.前阵偶尔看见IE可以让用户嵌入自己的CSS样式表,就是使用工具 - Internet选项 - 常规 - 辅助功能 - 用户样式表来定义.把自己的CSS写好,比如 * {font-size:20px;} ,然后嵌入.在ch

如何在线编辑修改PDF文件中的背景颜色

我们在网上下载一下文件的时候我们都需要使用一些工具去进行操作,就想我们使用的而一些PDF文件一样我,我们想要给PDF文件进行文件的编辑,但是我们不想下载软件该如何操作,小编教你们一个方法,可以使用在线编辑网站去进行操作,方法如下: 1.打开浏览器,搜索迅捷PDF在线转换器,找到对应网页,打开后可以看到菜单栏上有很多的操作选项. 2.进入网页之后,我们点击菜单栏上的"文档处理"选项,然后选择里面的"PDF背景颜色"功能,进行背景色修改. 3.接下来需要点击"

js代码从页面移植到文件中失效或js代码修改后不起作用的解决办法

最近在做关于网站的项目,总是发生这样的问题 写的javascript代码在页面上没有问题,但是将js代码移植到.js的文件中,在页面上进行调用,总是出现失效等错误 另外修改后的js代码,重新刷新网页仍然不起作用 经过大量搜索并经过验证,可以用下面方法来解决 将js代码封装到js文件中失效的原因可能是js文件中存在中文注释,导致在执行的时候中断,在js文件尽量不要写中文注释 修改后的js代码刷新网页后不起效果可能是因为你所用的浏览器使用缓存的问题,可在浏览器中设置取消使用缓存,并删除临时文件,重启

pch文件中自定义log

1 // __OBJC__这个宏,在所有的.m和.mm文件中默认就定义了这个宏 2 #ifdef __OBJC__ 3 4 // 如果这个全局的头文件或者宏只需要在.m或者.mm文件中使用, 5 // 请把该头文件或宏写到#ifdef __OBJC__ 中 6 7 #import <UIKit/UIKit.h> 8 #import <Foundation/Foundation.h> 9 10 11 #ifdef DEBUG 12 #define NJLog(...) NSLog(_