zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Hive学习笔记三
    spark之RDD练习
    Python之QRCode
    Zookeeper学习笔记一
    Docker学习笔记一
    MapReduce异常:java.lang.ClassCastException: interface javax.xml.soap.Text
    Hive学习笔记二
    Hive学习笔记一
    5.线性回归算法
    4.K均值算法
  • 原文地址:https://www.cnblogs.com/njflash/p/2886880.html
Copyright © 2011-2022 走看看