首页 > 代码库 > Flare3D游戏开发--1

Flare3D游戏开发--1

  学习Flare3D游戏开发已经第二天了,总结下目前所学的知识。

  1、创建一个3D手机游戏项目,需要确保air版本较高,最好是3.9。

    然后就是修改配置文件

<aspectRatio>landscape</aspectRatio>//设置支持横屏    <renderMode>direct</renderMode>//支持的接口

 

    如果Fb是4.7,则还需要修改<depthAndStencil>true</depthAndStencil>

    还需要导入对应的flare包。

  2、最开始的添加3D场景Viewer3D和Scene3D。

   

 var scene:Scene3D = new Viewer3D();

 

  3、往场景中添加文件

    

scene.addChildFromFile("res/car.f3d");//括号内为添加的文件路径

 

  4、添加帧监听,并且控制汽车的移动

scene.addEventListener(Scene3D.UPDATE_EVENT,refesh);

 

    以原点为中心,发出X、Y、Z轴,前后移动就是移动z坐标,每次移动都重绘一次。

    左右移动则是以Y轴为中心,向左、向右旋转对应的角度,rotateY(-1);角度为1到360   

    protected function refesh(event:Event):void        {            if(Input3D.keyDown(Input3D.UP)){                car.translateZ(-carSpeed);                }            if(Input3D.keyDown(Input3D.LEFT)){                car.rotateY(-1);                }            if(Input3D.keyDown(Input3D.DOWN)){                car.translateZ(carSpeed);                }            if(Input3D.keyDown(Input3D.RIGHT)){                car.rotateY(1);                }
} }

5、碰撞检测

定义碰撞体和被碰撞体

  car为碰撞体

public var hitTest:SphereCollision;hitTest = new SphereCollision(car);

  获取被碰撞体,并添加到碰撞函数中。在赛车游戏中,一般都为赛道的边缘

  

public var pzt:Pivot3D;hitTest.addCollisionWith(pzt);

  碰撞,直接调用SphereCollision中的一个方法slider

hitTest.slider();

6、照相机、镜头设置
  自定义镜头覆盖系统自带,然后设置摄像头的位置、摄像头对准的位置

public var camera:Camera3D;camera = new Camera3D("myCamera");scene.camera = camera;
camera.setPosition(3,3,5);
  //摄像头的x、y、z坐标
camera.lookAt(0,0,0);    //摄像头对准的位置

  如果只是这样设置。那么汽车移动的时候,摄像头则不会跟着移动,需要动态的设置摄像头的位置以及对准的位置跟着汽车的移动而移动

Pivot3DUtils.setPositionWithReference(camera,0,2,4,car,0.2);//摄像头、x、y、z、参考对象
Pivot3DUtils.lookAtWithReference(camera,
0,0,0,car);//坐标,以及对准的对象

  就目前接触的flare来说,很多都是在使用引擎直接封装好的函数在进行调用,我们需要做的就是较好的去阅读api,以实现自己的需求。

7、进度条的实现

  这里直接使用了别人写好的demo,直接调用来着。

package{    import flash.display.MovieClip;    import flash.display.Stage;    import flash.events.ProgressEvent;        public class LoadingBar    {                private var loadingBar:MovieClip;        private var loadingBarBg:MovieClip;        private var stage:Stage;                public function LoadingBar(stage:Stage)        {            this.stage = stage;        }                public function onl oading(event:ProgressEvent):void        {            loadingBar.width=event.bytesLoaded/event.bytesTotal*loadingBarBg.width;        }                //初始化进度条        public function initLoading():void{                        loadingBar=new HPBar();            loadingBarBg=new HPBarBG();                        //设置进度条的背景和进度条显示            loadingBarBg.width=stage.fullScreenWidth>>1.2;            loadingBarBg.height=stage.fullScreenHeight/30;            loadingBar.width=0;                        loadingBar.height=stage.fullScreenHeight/30;                                    //设置进度条x坐标            loadingBarBg.x =stage.fullScreenWidth * 0.26;            loadingBar.x=stage.fullScreenWidth * 0.26;                        //设置进度条Y坐标            loadingBarBg.y =stage.fullScreenHeight * 0.85;            loadingBar.y=stage.fullScreenHeight * 0.85;                        stage.addChild(loadingBarBg);            stage.addChild(loadingBar);        }                public function loadComplete():void        {            stage.removeChild(loadingBar);            stage.removeChild(loadingBarBg);        }    }}

 需要的一些文件:

http://pan.baidu.com/s/1bnEO3Xd

  贴几张今天的成果