`

Flint Particle粒子入门教程(四):接口和类的实现结构

阅读更多
下面我们看看Flint Particle的接口和类的关系。
在Flint Particle中Action是一个接口。
Action:
package org.flintparticles.common.actions
{
	import org.flintparticles.common.emitters.Emitter;
	import org.flintparticles.common.particles.Particle;
	
	public interface Action
	{
	function getDefaultPriority():Number;
	function addedToEmitter( emitter:Emitter ):void;
	function removedFromEmitter( emitter:Emitter ):void;
	function update( emitter:Emitter, particle:Particle, time:Number ):void;
	}
}

所有要实现Action接口的类都要两输入的元素:Emitter和Particle(发射器和粒子)
然后他们要实现4个基本的方法:
getDefaultPriority():Number;
addedToEmitter( emitter:Emitter ):void;
removedFromEmitter( emitter:Emitter ):void;
update( emitter:Emitter, particle:Particle, time:Number ):void;

《获得默认的优先级;
《加到发射器;
《从发射器移除;
《刷新(发射器、粒子和事件作为参数);

ActionBase implements Action
ActionBase类实现了Action的接口。
package org.flintparticles.common.actions
{
	import org.flintparticles.common.emitters.Emitter;
	import org.flintparticles.common.particles.Particle;	
	public class ActionBase implements Action
	{
		public function ActionBase()
		{
		}
		public function getDefaultPriority():Number
		{
			return 0;
		}
		public function addedToEmitter( emitter:Emitter ):void
		{
		}
		public function removedFromEmitter( emitter:Emitter ):void
		{
		}
		public function update( emitter:Emitter, particle:Particle, time:Number ):void
		{
		}
	}
}

ActionBase类实现了Action的接口,把getDefaultPriority()细化了,注意,ActionBase只是一个类,它没有继承任何其他的类。
关键的一点是它实现了接口,这样的类我们可以把很多共性的东西写到里面来,然后再让其他的类继承自它,可以减少代码的书写量,结构更明晰。

ScaleImage extends ActionBase
ScaleImage 继承自 ActionBase
package org.flintparticles.common.actions 
{
	import org.flintparticles.common.emitters.Emitter;
	import org.flintparticles.common.particles.Particle;	
	public class ScaleImage extends ActionBase
	{
		private var _diffScale:Number;
		private var _endScale:Number;
		public function ScaleImage( startScale:Number = 1, endScale:Number = 1 )
		{
			_diffScale = startScale - endScale;
			_endScale = endScale;
		}
		public function get startScale():Number
		{
			return _endScale + _diffScale;
		}
		public function set startScale( value:Number ):void
		{
			_diffScale = value - _endScale;
		}
		public function get endScale():Number
		{
			return _endScale;
		}
		public function set endScale( value:Number ):void
		{
			_diffScale = _endScale + _diffScale - value;
			_endScale = value;
		}
		override public function update( emitter:Emitter, particle:Particle, time:Number ):void
		{
			particle.scale = _endScale + _diffScale * particle.energy;
		}
	}
}


下面我们生产一个Candle粒子,其他的知识大家可以参考博客的其他文章或者是Flint Particle的其他参数文章,这里我们就不重复了,主要是讨论一下addAction(new ScaleImage(1,1));的功能,这里我们的设置是1、1,也就是说粒子不缩放了。
我们留意ScaleImage的两个参数。
package
{
	import org.flintparticles.common.actions.*;
	import org.flintparticles.common.counters.*;
	import org.flintparticles.common.displayObjects.Dot;
	import org.flintparticles.common.initializers.*;
	import org.flintparticles.threeD.actions.*;
	import org.flintparticles.threeD.activities.MoveEmitter;
	import org.flintparticles.threeD.emitters.Emitter3D;
	import org.flintparticles.threeD.geom.Vector3D;
	import org.flintparticles.threeD.initializers.*;
	import org.flintparticles.threeD.zones.*;	

	public class Candle extends Emitter3D
	{
		public function Candle( position:Vector3D )
		{
			//counter = new Steady( 5 );
			counter=new Blast(8);
			
			addInitializer( new SharedImage( new Dot( 1 ) ) );
			addInitializer( new ColorInit( 0xFFFFFF00, 0xFFFF6600 ) );
			addInitializer( new Position( new PointZone( position ) ) );
			addInitializer( new Velocity( new DiscZone( new Vector3D( 0, 120, 0 ), new Vector3D( 0, 1, 0 ), 30 ) ) );
			addInitializer( new Lifetime( 5 ) );
			
			addAction( new Move() );
			addAction( new Accelerate( new Vector3D( 0, -50, 0 ) ) );
			addAction( new Age() );
			addAction(new ScaleImage(1,1));
			
		}
	}
}

进入到ScaleImage的构成
public function ScaleImage( startScale:Number = 1, endScale:Number = 1 )
第一个为startScal(开始缩放大小)e,第二个为endScale(结束缩放大小)。



分享到:
评论

相关推荐

    flint粒子系统-飞翔的乌鸦flash 3d

    Flint粒子系统是由Uncle3D团队开发的一款高效、灵活的2D和3D粒子编辑器,支持ActionScript 3.0,广泛应用于Flash平台。其核心特点包括实时预览、丰富的粒子效果库、自定义粒子形状、粒子间的交互以及多层粒子系统,...

    BornGrass-flint粒子系统-完美的草丛flash 3d

    总的来说,"BornGrass-flint粒子系统"是Flash 3D环境中实现草丛效果的优秀工具,它以其强大的性能、高度的定制性和丰富的视觉效果,为数字内容创作带来了新的可能。无论你是游戏开发者、动画师还是视觉艺术家,掌握...

    数论库flint手册

    - **ABI(应用程序二进制接口)**:FLINT针对不同的ABI进行了优化,以确保在各种平台上都能获得良好的兼容性和性能。 - **架构支持**:FLINT支持多种处理器架构,包括x86、ARM等,这使得它能够在广泛的硬件平台上运行...

    Flint_2_1_3_source.zip_Flint_2_1_3_source_flex

    1. **灵活性**:Flint提供了高度可定制的粒子生成器和控制器,允许开发者调整粒子的生命周期、行为和外观,以适应不同的应用场景。 2. **3D支持**:不同于许多仅限于2D的粒子系统,Flint支持3D环境,可以创建出具有...

    flint:前端入门套件

    **Flint前端入门套件** 是一款专为初学者设计的工具包,旨在简化前端开发的初始阶段。它特别强调了CSS预处理的功能,帮助开发者更高效地编写样式代码。预处理器如Sass、Less或Stylus允许开发者使用变量、嵌套规则、...

    Flint: Making Sparks (and Sharks!)

    在某个峰会上,他深入探讨了Flint的相关知识,特别是其架构和安装流程。Flint项目的目标是将大数据分析服务(Big Data Analytics Service,简称BDAS)带入亚马逊网络服务(Amazon Web Services,简称AWS)的大众市场...

    flint_加密方法_C++语言库

    "flint_加密方法_C++语言库"显然是一个专门针对C++编程环境设计的加密工具包,旨在帮助开发者实现安全的数据保护功能。 标题中的“flint”可能是指该库的项目名,它可能来源于英文单词“flint”,意为燧石,象征着...

    FLINT Jul 2012.pdf

    因此,FLINT建议提升发射高度和发射角度来实现更远的射程。FLINT模拟的许多导弹会根据现实世界的规格,在发射后立即向上升起,进入弹道轨迹,从而实现更高的飞行高度和更远的航程。例如,AIM-120C导弹和AGM-114地狱...

    前端开源库-flint-babylon

    3. **预设组件**:`flint-babylon`可能包含了预设的3D对象和组件,如相机、粒子系统、UI元素等,方便开发者快速搭建3D场景。 4. **性能优化**:通过针对前端应用场景的优化,`flint-babylon`可能提高了Babylon.js在...

    flint:用于智能合约的Flint编程语言

    论文:当前工作文件: 在苏珊·艾森巴赫(Susan Eisenbach)和索菲娅·德罗索普洛(Sophia Drossopoulou)教授的指导下,弗林特(Flint)是项目和夏季工作的一部分。 它的最初开发者是Franklin Schrans,他的论文是...

    flint8.5 on linux特效合成系统.pdf

    flint8.5 on linux特效合成系统.pdf

    flint:Freelancer的解析器和API及其格式

    flint为Freelancer风格的INI实现了一个解析器,并为Freelancer使用的每种二进制文件格式(BINI,资源DLL和UTF)实现了与平台无关的读取器实现。 所有这些实现都可以在找到。 此外,资源字符串处理将RDL(自由职业者...

    Flint:Flint框架,用于使用功能驱动开发在Apple平台上构建应用程序

    Flint是一个框架,可使用Swift的功能根据功能和操作为Apple平台构建应用程序。 应用的功能是根据运行时限制启用的; 系统权限,操作系统版本或应用内购买。 它需要您的操作,并提供增强的日志记录,自动分析事件,...

    flint-web-sender-sdk:弃用的项目

    它可能包含API接口、示例代码、文档和必要的配置选项,使得开发者可以快速将消息发送功能集成到Web应用中。 在`flint-web-sender-sdk` 被弃用后,开发者需要寻找替代方案。这可能包括寻找其他成熟的即时通讯SDK,...

    基于Flint的师生互动实证研究论文.pdf

    "基于Flint的师生互动实证研究论文" 本文是基于Flint的师生互动实证研究论文,主要探讨基于Flint的师生互动实证研究。Flint是 Foreign Language Interaction System 的缩写,是一种互动分析系统,用于分析课堂师生...

    flint-web-sdk:JavaScript 中的 Flint Web SDK

    该项目包括网络发送方 sdk 和接收方 sdk 发件人SDK 现在 Sender SDK 可用于 Firefox OS 2.2。 请下载并将其添加到您的 Firefox OS 应用程序中。 您可以参考了解更多信息。 接收器 SDK 只需将 JavaScript 库 URL ...

    数论库FLINT

    强大的数论库

    Flint:跨平台图形库

    5. **易用性与社区支持**:Flint-release可能包含了详细的文档、示例代码和教程,帮助开发者快速上手。一个活跃的社区也是衡量库质量的重要标准,开发者可以通过论坛、邮件列表或GitHub上的问题追踪系统获取帮助和...

    Discreet推出基于英特尔架构IBM Linux工作站的flint视觉效果系统.pdf

    flint视觉效果系统是专为电影、电视和其他多媒体内容制作设计的工具,可能包含高级的图像处理、合成、粒子系统、动态模拟等功能,旨在帮助艺术家们创造逼真的特效和动画。这类系统通常需要强大的计算能力和高效的...

Global site tag (gtag.js) - Google Analytics