flash物理引擎APE 快速上手教程
flash物理引擎APE 快速上手教程 APE是Actionscript Physics Engine的缩写,即为Actionscript的物理引擎。还有其他的as的物理引擎,比如说Box2d,这个以后再学习,现在先从较为简单的APE开始学习。 在一个物理世界里,首先应该有一些物体吧。在APE的世界中,物体即为粒子。这些粒子可以理解为各种物体,如地上的桌子,椅子,弹来弹去的乒乓球,在APE里甚至地面也是粒子。 创建圆形粒子 创建轮形粒子 创建矩形粒子 创建约束粒子 粒子父类 AbstractParticle是CircleParticle和RectangleParticle的父类 主要属性 center:Vector 粒子的当前位置 主要方法 addForce()给粒子一个考虑质量的力 stiffness使约束变硬,值越大越硬 这里没说到WheelParticle的父类,笔者在其他教程中也未见说明,通过看源文件可以发现,WheelParticle的父类是CircleParticle。 主要属性 在一个物理世界里只有粒子是远远不够的,在需要很多其他东西 关于组 组是Group,组可以包含粒子和复合体,组可以被设置为和其他组进行碰撞测试 创建一个组 var group:Group=new Group(是否组内的成员进行碰撞检测:Boolean) 方法 addParticle(),addConstraint()在组中加入粒子、约束,粒子和约束只有加入到组中才能接收碰撞检测 关于复合体 复合体可以包含粒子和约束,复合体中的成员彼此不能进行碰撞检测 属性 方法 rotateByRadian()方法 3.APEngine container属性 方法 paint()和step()方法要在主程序中循环使用,要建立一个ENTER_FRAME的侦听,来执行APEngine的paint()和step()方法。 下面给出一个简单的例子
package { import flash.display.*; import flash.events.*; import org.cove.ape.*; public class wendanglei extends Sprite { private var example:Example; public function wendanglei() { //对舞台进行一些设置 stage.scaleMode=StageScaleMode.NO_SCALE; stage.frameRate=55; example=new Example(stage);//实例化之前定义的类 //加一个侦听器,调用paint()和step()函数 addEventListener(Event.ENTER_FRAME,run); //对APEngine的初始化 APEngine.init(1 / 4); APEngine.container=this; APEngine.addForce(new Vector(0,2)); //把example组加入到引擎中 APEngine.addGroup(example); } private function run(e:Event) { APEngine.step(); APEngine.paint(); } } } 然后是一个定义了各种粒子的组
package { import flash.display.*; import flash.events.*; import org.cove.ape.*; public class Example extends Group { //声明变量 private var mStage:Stage; private var group:Group; private var Ball1:CircleParticle; private var Ball2:CircleParticle; private var Ball3:CircleParticle; private var lian1:SpringConstraint; private var lian2:SpringConstraint; private var Wall1:RectangleParticle; private var Wall2:RectangleParticle; private var Wall3:RectangleParticle; private var wheel:WheelParticle; public function Example(mStage:Stage) { //变量的初始化 Ball1=new CircleParticle(200,295,5,true); Ball2=new CircleParticle(5,150,true); Ball3=new CircleParticle(390,true); lian1=new SpringConstraint(Ball1,Ball2,1,true,10); lian2=new SpringConstraint(Ball1,Ball3,10); Wall1=new RectangleParticle(200,-5,400,10,true); Wall2=new RectangleParticle(-5,75,true); Wall3=new RectangleParticle(405,true); wheel=new WheelParticle(20,10); //把粒子和约束加入到组里 addParticle(Ball1); addParticle(Ball2); addParticle(Ball3); addParticle(Wall1); addParticle(Wall2); addParticle(Wall3); addParticle(wheel); addConstraint(lian1); addConstraint(lian2); //组内的粒子之间可以碰撞检测 this.collideInternal=true; //在舞台上添加侦听 this.mStage = mStage; this.mStage.addEventListener(MouseEvent.MOUSE_DOWN,AddForce); } //在点击鼠标时,给wheel一个随机的力 private function AddForce(e:MouseEvent) { wheel.addForce(new Vector(100*Math.random(),100*Math.random())); } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |