Flare3D游戏特效教程:火拳阿宝

截图预览:

Flare3D游戏特效教程:火拳阿宝

网页预览:http://eko.kooteam.com/flare3d/abao/

 

一 思路

我们在玩游戏的时候,经常能看到一些粒子特效被绑定在武器上,装备上。其实就是将粒子定位在某个对象上。在这篇教程中,我们把火焰粒子绑定在阿宝的两个手掌的骨骼上。

二 准备

现在我们需要一个火焰粒子特效和一个阿宝的模型。

粒子特效我直接拿了yblunan的东西,地址如下:火焰粒子

阿宝的模型在最后附件中提供,值得注意的是,模型中我将左右手掌需要绑定的骨骼命名为fire,fire2。

接下来先看看完整代码,然后逐步讲解。

三 完整代码

 1 package

 2 {

 3     import base.Base;

 4 

 5     import components.BoneController;

 6 

 7     import flare.basic.Scene3D;

 8     import flare.basic.Viewer3D;

 9     import flare.core.Camera3D;

10     import flare.core.Mesh3D;

11     import flare.core.ParticleEmiter3D;

12     import flare.core.Pivot3D;

13     import flare.core.Texture3D;

14     import flare.materials.ParticleMaterial3D;

15     import flare.materials.filters.ColorParticleFilter;

16     import flare.materials.filters.TextureFilter;

17 

18     import flash.display.Bitmap;

19     import flash.events.Event;

20 

21     [SWF(width=800,height=600)]

22     public class TheBao extends Base

23     {

24         [Embed(source="fire.png")]

25         private var Fire:Class;

26 

27         [Embed(source="abao.f3d",mimeType="application/octet-stream")]

28         private var ABao:Class;

29         private var scene:Scene3D;

30         private var bao:Pivot3D;

31         public function TheBao(info:String="粒子绑定骨骼")

32         {

33             super(info);

34             scene=new Viewer3D(this);

35             scene.camera=new Camera3D();

36             scene.camera.z=-250;

37             scene.camera.y=100;

38             //scene.frameRate=10;

39             scene.addEventListener(Scene3D.COMPLETE_EVENT,onCom);

40 

41             bao=scene.addChildFromFile(new ABao);

42 

43         }

44         private function onCom(e:Event):void

45         {

46 

47             var fire:Bitmap=new Fire();

48             var pm:ParticleMaterial3D=new ParticleMaterial3D();

49             pm.filters.push(new TextureFilter(new Texture3D(fire.bitmapData)));

50             pm.filters.push(new ColorParticleFilter([0xffffff,0xffff00,0xff0000,0x000000],[1,.5,.2,0]));

51             pm.build();

52 

53             var fireEmiter:ParticleEmiter3D=new ParticleEmiter3D("",pm,new FireParticle());

54             fireEmiter.particlesLife=20;

55             fireEmiter.emitParticlesPerFrame=50;

56             fireEmiter.rotateX(90);

57             fireEmiter.layer=10;

58 

59             var fireEmiter2:ParticleEmiter3D=new ParticleEmiter3D("",pm,new FireParticle());

60             fireEmiter2.particlesLife=20;

61             fireEmiter2.emitParticlesPerFrame=50;

62             fireEmiter2.rotateX(90);

63             fireEmiter2.layer=11;

64 

65             var baoMesh:Mesh3D=bao.getChildByName("bao") as Mesh3D;

66             fireEmiter.addComponent(new BoneController(baoMesh,"fire"));

67             fireEmiter2.addComponent(new BoneController(baoMesh,"fire2"));

68             scene.addChild(fireEmiter);

69             scene.addChild(fireEmiter2);

70         }

71     }

72 }

 

四 代码分析

首先,创建场景,设定摄像机位置,并加载阿宝的模型

super(info);

scene=new Viewer3D(this);

scene.camera=new Camera3D();

scene.camera.z=-250;

scene.camera.y=100;

scene.addEventListener(Scene3D.COMPLETE_EVENT,onCom);

bao=scene.addChildFromFile(new ABao);

其次,我们来创建火焰粒子

//创建火焰粒子的材质

var fire:Bitmap=new Fire();

var pm:ParticleMaterial3D=new ParticleMaterial3D();

pm.filters.push(new TextureFilter(new Texture3D(fire.bitmapData)));

pm.filters.push(new ColorParticleFilter([0xffffff,0xffff00,0xff0000,0x000000],[1,.5,.2,0]));

pm.build();



//实例化两个火焰粒子

var fireEmiter:ParticleEmiter3D=new ParticleEmiter3D("",pm,new FireParticle());

//粒子的生命,也就是过多久会消失

fireEmiter.particlesLife=20;

//每帧生成多少个粒子

fireEmiter.emitParticlesPerFrame=50;

//将粒子绕x轴旋转了90度,确保发射方向从掌心射出

fireEmiter.rotateX(90);

fireEmiter.layer=10;



var fireEmiter2:ParticleEmiter3D=new ParticleEmiter3D("",pm,new FireParticle());

fireEmiter2.particlesLife=20;

fireEmiter2.emitParticlesPerFrame=50;

fireEmiter2.rotateX(90);

fireEmiter2.layer=11;

再次 我们将火焰粒子绑定到骨骼上,这里用到官方提供的自定义骨骼控制类BoneController

var baoMesh:Mesh3D=bao.getChildByName("bao") as Mesh3D;

fireEmiter.addComponent(new BoneController(baoMesh,"fire"));

fireEmiter2.addComponent(new BoneController(baoMesh,"fire2"));

scene.addChild(fireEmiter);

scene.addChild(fireEmiter2);

五 所有资源打包放出

点击下载 abao

你可能感兴趣的:(游戏)