- 浏览: 379239 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (121)
- flex及Flash3D表现研究 (6)
- papervision3D研究 (26)
- flashParticle粒子系统 (9)
- Papervision3d动力学研究 (6)
- flex知识 (14)
- as3程序基础 (11)
- flex组件样式演示 (3)
- flex与PHP、mySQL学习 (0)
- flex声音表现研究 (0)
- flex整站开发研究 (0)
- flex开发市场 (0)
- flash cs3教程 (1)
- flex与flash文件的交互 (2)
- flex、flash资源集 (1)
- flash cs4研究 (1)
- flash游戏编程 (0)
- DirectX游戏编程 (3)
- silverlight研究 (4)
- Java学习 (2)
- 数学知识 (1)
- VC++ (3)
- 行业信息 (2)
- away3d (6)
- alternativa3d (1)
- Pixel Bender 研究 (0)
- 随笔 (1)
- Google O3D (1)
- Javascript (1)
- iphone 3d游戏开发 (6)
- Html 5 3d (3)
- Unity3d手机游戏开发 (5)
最新评论
-
3580737:
在哪里看看
AS3的深度管理及排序 -
yangyang111310:
我靠 哥们 行不行啊
flex + tomcat + myEclipse环境配置与使用(三) -
jjjkkk:
nice 感谢 flash player的版本真DT
Flash Player10 Debug版--正式版 -
lattimore:
Excellent
从3dsmax导出Dae模型到papervision3D -
ytdalin21:
合作很愉快,技术都挺靠谱!下次继续合作!
papervision dae animation(DAE角色动画控制)
【http://www.newflash3d.com---flash3D先锋队:北京贝武易科技公司】
有疑问请联系我QQ:363596350
Flint Particle粒子的类库有三个文件包:
common,通用文件包;
threeD,三维包;
twoD,二维包;
我们看看twoD,二维包的内容。
actions---行为
activities--活动力
emitters---发射器
initializers--初始化器(所有的初始化类都放在这个目录了)
particles---粒子类
renderers---渲染类
zones-----区域类
我们看看渲染类:
BitmapRenderer.as----位图渲染器
DisplayObjectRenderer.as--显示物体渲染器
PixelRenderer.as----象素渲染器
关于counter(计数器)
counter是一个接口,它决定了粒子是以何种方式发射,counter由很多counter类来实现它的方法,这每个实现了counter接口的类都是不同方式的粒子发射形式。如稳定的发射或爆炸式的发射。而counter同时是粒子发射器(Emitter )的属性。
下面是它的定义:
counter — Property in class org.flintparticles.common.emitters.Emitter
The Counter for the Emitter.
Counter — Interface in package org.flintparticles.common.counters
The Counter interface must be implemented by all counters.
他们之间的关系公式:
Blast.as---爆炸式
Counter.as---Counter总接口
KeyDownCounter.as---按键式
PerformanceAdjusted.as---表演调整式
Pulse.as---脉冲式
Random.as---随机式
SineCounter.as---正弦式
Steady.as---稳定式
TimePeriod.as---间断式
ZeroCounter.as---零点式
参阅Emitter.as,我们可以看到Emitter的counter方法是一个set get 存取器:
默认的情况下:
看看ZeroCounter类的代码:
粒子的发射为0,也就看不见粒子了。
我们编写一个实例,我们一步一步往下走,相信我们会做出点成绩来的!
进入Flex,建立好各种设置,类和环境的安装,相信大家都会了,代码如下:
一个发射器:private var emitter:Emitter2D;
一个渲染器:private var render:DisplayObjectRenderer;
我们的粒子发射框架就建立好了,剩下的只是增加一些必须的细节环节。
但是这时候我们还不能看到场景里有任何粒子,我们接着操作。
给粒子加一个稳定的发射方式:
代码如下:
运行,会报错。
错误类型为子物体不能为空,是在DisplayObjectRenderer.as类的第95行
我们看看DisplayObjectRenderer.as类的第95行。
也就是说程序找不到这个粒子图像元素(particle.image)。
进入particle类,看看image变量的定义:
image变量默认的情况下为空,但是它的类型不是单一的,二维粒子(2D particle)的时候它通常是一个显示物体(DisplayObject),在三维粒子(3D particle)它可以是一个显示物体(DisplayObject)或是根据渲染系统定义的一个三维物体(3D object)。那么为了让DisplayObjectRenderer渲染出物体,我们还需要一个方法来给粒子图像元素(particle.image)实例化出来。
这里会涉及到另外一个接口-初始化接口(initialize)
关于初始化接口(initialize):
initialize接口类在common目录下:
我们看看它里面的文档结构:
Initializer.as--总接口
所有的初始化设置器必须要实现以上的4个方法。
回到刚才的实例,我们加入如下代码:
完整的代码如下:
运行程序,我们看到在画布的左上交一个大的点,其实那就是我们发射的粒子。这回没有报错,因为我们实现了粒子的实例化了。
下面我们分析一下
的意义。
ImageClass其实是一个初始化设置器,它实现了Initializer.as的接口。
有疑问请联系我QQ:363596350
Flint Particle粒子的类库有三个文件包:
common,通用文件包;
threeD,三维包;
twoD,二维包;
我们看看twoD,二维包的内容。
actions---行为
activities--活动力
emitters---发射器
initializers--初始化器(所有的初始化类都放在这个目录了)
particles---粒子类
renderers---渲染类
zones-----区域类
我们看看渲染类:
BitmapRenderer.as----位图渲染器
DisplayObjectRenderer.as--显示物体渲染器
PixelRenderer.as----象素渲染器
关于counter(计数器)
counter是一个接口,它决定了粒子是以何种方式发射,counter由很多counter类来实现它的方法,这每个实现了counter接口的类都是不同方式的粒子发射形式。如稳定的发射或爆炸式的发射。而counter同时是粒子发射器(Emitter )的属性。
下面是它的定义:
counter — Property in class org.flintparticles.common.emitters.Emitter
The Counter for the Emitter.
Counter — Interface in package org.flintparticles.common.counters
The Counter interface must be implemented by all counters.
他们之间的关系公式:
Emitter.counter=new 实现counter接口的类();
Blast.as---爆炸式
Counter.as---Counter总接口
KeyDownCounter.as---按键式
PerformanceAdjusted.as---表演调整式
Pulse.as---脉冲式
Random.as---随机式
SineCounter.as---正弦式
Steady.as---稳定式
TimePeriod.as---间断式
ZeroCounter.as---零点式
参阅Emitter.as,我们可以看到Emitter的counter方法是一个set get 存取器:
public function get counter():Counter { return _counter; } public function set counter( value:Counter ):void { _counter = value; }
默认的情况下:
protected var _counter:Counter;//_counter是一个接口 _counter = new ZeroCounter();//接口实例化
看看ZeroCounter类的代码:
package org.flintparticles.common.counters { import org.flintparticles.common.emitters.Emitter; public class ZeroCounter implements Counter { public function ZeroCounter() { } public function startEmitter( emitter:Emitter ):uint { return 0;//开始发射为0!! } public function updateEmitter( emitter:Emitter, time:Number ):uint { return 0; } public function stop():void { } public function resume():void { } } }
粒子的发射为0,也就看不见粒子了。
我们编写一个实例,我们一步一步往下走,相信我们会做出点成绩来的!
进入Flex,建立好各种设置,类和环境的安装,相信大家都会了,代码如下:
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:myCanvas3D="*" layout="absolute" xmlns:myCanvas3D1="myCanvas3D.*" applicationComplete="init();"> <mx:Script> <![CDATA[ import flash.geom.Point; import org.flintparticles.common.renderers.Renderer; import org.flintparticles.common.counters.*; import org.flintparticles.common.displayObjects.RadialDot; import org.flintparticles.common.initializers.*; import org.flintparticles.twoD.actions.*; import org.flintparticles.twoD.emitters.Emitter2D; import org.flintparticles.twoD.initializers.*; import org.flintparticles.twoD.zones.*; import org.flintparticles.twoD.renderers.*; private var render:DisplayObjectRenderer; private var emitter:Emitter2D; public function init():void{ emitter=new Emitter2D();//建立二维发射器 emitter.start(); //发射器启动 render = new DisplayObjectRenderer();//建立渲染器 render.addEmitter(emitter); //发射器加入到渲染器 mycanvas3d.canvas.addChild(render); //渲染器加入场景画布 } ]]> </mx:Script> <myCanvas3D1:Canvas3D width="500" height="400" id="mycanvas3d" backgroundColor="0x000000"/> </mx:Application>
一个发射器:private var emitter:Emitter2D;
一个渲染器:private var render:DisplayObjectRenderer;
我们的粒子发射框架就建立好了,剩下的只是增加一些必须的细节环节。
但是这时候我们还不能看到场景里有任何粒子,我们接着操作。
给粒子加一个稳定的发射方式:
emitter.counter = new Steady( 100 );
代码如下:
<mx:Script> <![CDATA[ import flash.geom.Point; import org.flintparticles.common.renderers.Renderer; import org.flintparticles.common.counters.*; import org.flintparticles.common.displayObjects.RadialDot; import org.flintparticles.common.initializers.*; import org.flintparticles.twoD.actions.*; import org.flintparticles.twoD.emitters.Emitter2D; import org.flintparticles.twoD.initializers.*; import org.flintparticles.twoD.zones.*; import org.flintparticles.twoD.renderers.*; private var render:DisplayObjectRenderer; private var emitter:Emitter2D; public function init():void{ emitter=new Emitter2D(); emitter.counter = new Steady( 100 );//新加的稳定发射方式 emitter.start(); render = new DisplayObjectRenderer(); render.addEmitter(emitter); mycanvas3d.canvas.addChild(render); } ]]> </mx:Script> <myCanvas3D1:Canvas3D width="500" height="400" id="mycanvas3d" backgroundColor="0x000000"/> </mx:Application>
运行,会报错。
TypeError: Error #2007: 参数 child 不能为空。 at flash.display::DisplayObjectContainer/addChildAt() at org.flintparticles.twoD.renderers::DisplayObjectRenderer/addParticle()[E:\flexProject\papervision3dExe\FlintSnow\src\org\flintparticles\twoD\renderers\DisplayObjectRenderer.as:95] at org.flintparticles.common.renderers::SpriteRendererBase/particleAdded()[E:\flexProject\papervision3dExe\FlintSnow\src\org\flintparticles\common\renderers\SpriteRendererBase.as:121] at flash.events::EventDispatcher/dispatchEventFunction() at flash.events::EventDispatcher/dispatchEvent() at org.flintparticles.common.emitters::Emitter/createParticle()[E:\flexProject\papervision3dExe\FlintSnow\src\org\flintparticles\common\emitters\Emitter.as:548] at org.flintparticles.common.emitters::Emitter/update()[E:\flexProject\papervision3dExe\FlintSnow\src\org\flintparticles\common\emitters\Emitter.as:677] at org.flintparticles.common.emitters::Emitter/updateEventListener()[E:\flexProject\papervision3dExe\FlintSnow\src\org\flintparticles\common\emitters\Emitter.as:642] at flash.events::EventDispatcher/dispatchEventFunction() at flash.events::EventDispatcher/dispatchEvent() at org.flintparticles.common.utils::FrameUpdater/frameUpdate()[E:\flexProject\papervision3dExe\FlintSnow\src\org\flintparticles\common\utils\FrameUpdater.as:88]
错误类型为子物体不能为空,是在DisplayObjectRenderer.as类的第95行
我们看看DisplayObjectRenderer.as类的第95行。
addChildAt( particle.image, 0 );
也就是说程序找不到这个粒子图像元素(particle.image)。
进入particle类,看看image变量的定义:
/** * The object used to display the image. In a 2D particle, this is usually * a DisplayObject. In a 3D particle, this may be a DisplayObject, for * displaying on a billboard or similar, or a 3D object in the form used * by the render system. */ public var image:* = null;
image变量默认的情况下为空,但是它的类型不是单一的,二维粒子(2D particle)的时候它通常是一个显示物体(DisplayObject),在三维粒子(3D particle)它可以是一个显示物体(DisplayObject)或是根据渲染系统定义的一个三维物体(3D object)。那么为了让DisplayObjectRenderer渲染出物体,我们还需要一个方法来给粒子图像元素(particle.image)实例化出来。
这里会涉及到另外一个接口-初始化接口(initialize)
关于初始化接口(initialize):
initialize接口类在common目录下:
我们看看它里面的文档结构:
Initializer.as--总接口
package org.flintparticles.common.initializers { //发射器(它主要是处理发射器与粒子之间的关系) import org.flintparticles.common.emitters.Emitter; //粒子 import org.flintparticles.common.particles.Particle; public interface Initializer { //设置初始化设置器的优先权 function getDefaultPriority():Number; //加到发射器上 function addedToEmitter( emitter:Emitter ):void; //从发射器移除 function removedFromEmitter( emitter:Emitter ):void; //初始化的方法,建立粒子和发射器之间的关系 function initialize( emitter:Emitter, particle:Particle ):void; } }
所有的初始化设置器必须要实现以上的4个方法。
回到刚才的实例,我们加入如下代码:
emitter.addInitializer( new ImageClass( RadialDot, 18 ) );
完整的代码如下:
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:myCanvas3D="*" layout="absolute" xmlns:myCanvas3D1="myCanvas3D.*" applicationComplete="init();"> <mx:Script> <![CDATA[ import flash.geom.Point; import org.flintparticles.common.renderers.Renderer; import org.flintparticles.common.counters.*; import org.flintparticles.common.displayObjects.RadialDot; import org.flintparticles.common.initializers.*; import org.flintparticles.twoD.actions.*; import org.flintparticles.twoD.emitters.Emitter2D; import org.flintparticles.twoD.initializers.*; import org.flintparticles.twoD.zones.*; import org.flintparticles.twoD.renderers.*; private var render:DisplayObjectRenderer; private var emitter:Emitter2D; public function init():void{ emitter=new Emitter2D(); emitter.counter = new Steady( 100 ); emitter.addInitializer( new ImageClass( RadialDot, 18 ) ); emitter.start(); render = new DisplayObjectRenderer(); render.addEmitter(emitter); mycanvas3d.canvas.addChild(render); } ]]> </mx:Script> <myCanvas3D1:Canvas3D width="500" height="400" id="mycanvas3d" backgroundColor="0x000000"/> </mx:Application>
运行程序,我们看到在画布的左上交一个大的点,其实那就是我们发射的粒子。这回没有报错,因为我们实现了粒子的实例化了。
下面我们分析一下
emitter.addInitializer( new ImageClass( RadialDot, 18 ) );
的意义。
ImageClass其实是一个初始化设置器,它实现了Initializer.as的接口。
发表评论
-
Flint Particle粒子入门教程(五):关于Initializer
2009-02-21 18:53 1997在Flint Particle粒子中,Initializer是 ... -
Flint Particle粒子入门教程(四):接口和类的实现结构
2009-02-21 14:17 1940下面我们看看Flint Particl ... -
关于FlintParticle的Initializer(初始化)类
2009-01-17 21:37 1146Initializer是FlintParticle的基础接口, ... -
Flint Particle粒子入门教程(三):三维粒子实例之烟花效果
2009-01-11 00:13 2876【http://www.newflash3d.com--- ... -
Flint Particle粒子入门教程(二):三维粒子实例
2009-01-10 22:13 1999我们来研究一下Flint Particle粒子的三维粒子演示, ... -
Flint Particle粒子入门教程-基本结构思路
2009-01-09 12:59 1658这里我们讨论一下Flint Particle粒子应用的基本结构 ... -
Flint Particle粒子入门教程
2009-01-08 20:39 2952这个是Flint Particle粒子入门教程,as3 fla ... -
flashparticle粒子实例(一)
2009-01-06 01:28 1719【http://www.newflash3d.com---fl ...
相关推荐
其中,Flint粒子系统是一款强大的开源粒子编辑器,它允许开发者通过简单易用的界面创建出复杂的3D效果。本篇文章将深入探讨如何利用Flint粒子系统来实现《飞翔的乌鸦》这一特定的3D场景。 1. Flint粒子系统简介 ...
本文将深入探讨"BornGrass-flint粒子系统",一种专为Flash 3D设计的粒子系统,它能够模拟出极其逼真的草丛动画效果。 首先,BornGrass-flint粒子系统是基于Flash平台的3D引擎,它充分利用了Flash的性能,实现了高效...
- **基础示例**:通过几个简单的示例演示了如何使用FLINT进行基本操作。 - **高级应用**:展示了FLINT在解决复杂数学问题方面的应用案例。 - **代码解析**:详细解释了示例代码的工作原理和实现细节。 #### 十五、...
Flint 2.1.3 是一款专为Adobe Flex开发者设计的3D粒子系统库,它的核心功能在于提供强大的工具来创建令人惊叹的视觉效果,如火焰、烟雾、雪花、星光等。这款开源库为Flex应用程序注入了丰富的动态元素,使得用户界面...
FLINT(FLEXIBLE INTERCEPTOR A REALISTIC MISSILE SIMULATION SOFTWARE)是一款针对商品游戏(commodity games)的现实主义导弹模拟软件。它能在不需要复杂引擎支持的情况下,为游戏提供相当真实的导弹和火箭弹道的...
在某个峰会上,他深入探讨了Flint的相关知识,特别是其架构和安装流程。Flint项目的目标是将大数据分析服务(Big Data Analytics Service,简称BDAS)带入亚马逊网络服务(Amazon Web Services,简称AWS)的大众市场...
flint8.5 on linux特效合成系统.pdf
"flint_加密方法_C++语言库"显然是一个专门针对C++编程环境设计的加密工具包,旨在帮助开发者实现安全的数据保护功能。 标题中的“flint”可能是指该库的项目名,它可能来源于英文单词“flint”,意为燧石,象征着...
**Flint前端入门套件** 是一款专为初学者设计的工具包,旨在简化前端开发的初始阶段。它特别强调了CSS预处理的功能,帮助开发者更高效地编写样式代码。预处理器如Sass、Less或Stylus允许开发者使用变量、嵌套规则、...
3. **预设组件**:`flint-babylon`可能包含了预设的3D对象和组件,如相机、粒子系统、UI元素等,方便开发者快速搭建3D场景。 4. **性能优化**:通过针对前端应用场景的优化,`flint-babylon`可能提高了Babylon.js在...
强大的数论库
FLINT 是一个支持数论计算的 C 库。这也是一个 数论算法研究项目。FLINT 主要由快速 标量和多项式算术、因式分解和线性代数 基本环(整数、有理数、实数、有限域、数域、p-adics)。 它包括一些更高级别的代数和解析...
Flint是 Foreign Language Interaction System 的缩写,是一种互动分析系统,用于分析课堂师生言语行为的教学效果。 论文首先介绍了研究背景,指出传统的教学评估方法存在缺陷,于是引入了FIAS(Flanders ...
即Discreet公司(可能是指现在的Autodesk Discreet,Autodesk的一个子公司,专注于媒体与娱乐行业的软件)发布了一款名为flint的视觉效果(Visual Effects, VFX)系统。这款系统是特别设计用于IBM Linux工作站的,这...
int石编程语言 Flint是一种新型的类型安全,面向合同的编程语言,专门用于在以太坊上编写健壮的智能合同。 Flint仍处于alpha开发阶段,尚未准备好用于生产中。 中型文章: 和编程2018! 论文:当前工作文件: 在苏珊...
目前,它是作为Python模块编写的,但是我希望有一天它将使用命令行工具。 Flint目前尚无法完全使用,但它确实包含一些不错的功能,并且已从非常基本的水平集成到了一些项目中。 当前,标记化是好的,并且几个非常大...
`Flint-Store` 是一个基于 EmberJS 框架构建的电子商务项目,旨在创建一个在线商店,提供各种令人敬畏的商品。EmberJS 是一款强大的、用于构建用户界面的前端JavaScript框架,特别适合开发单页应用程序(SPA)。它...
为Apple平台构建出色的应用程序涉及大量工作; 自定义网址方案,应用内购买,授权系统权限,通用链接,切换和Siri支持,跟踪分析事件,功能标记等。 这些东西可能是繁琐而耗时的,但你不应该动手做这一切!
Flint是一个框架,可使用Swift的功能根据功能和操作为Apple平台构建应用程序。 应用的功能是根据运行时限制启用的; 系统权限,操作系统版本或应用内购买。 它需要您的操作,并提供增强的日志记录,自动分析事件,...