APE 2D物理引擎使用
先去http://www.cove.org/ape/index.htm 下载作者的最新版APE
然后打开说明文档 docs\api\index.html
这里一共十二个类,看起来很少,所以初学者可以更有信心了。
***************************************************************************************************
先简单介绍一下:
AbstractCollection 所有群组的抽象类
AbstractConstraint 所有物理相互作用的的抽象类
AbstractItem 所有相互作用(碰撞)、粒子的基类
AbstractParticle 关于粒子的基类
APEngine 主引擎、力的类
CircleParticle 圆形粒子
RectangleParticle 矩形粒子
Composite 可以包含粒子和碰撞的复合物类
Group 一个组的类,可以包含粒子、碰撞、复合物
SpringConstraint 两个粒子之间类似弹性碰撞的类(弹簧)
Vector 力
WheelParticle 一个粒子,模拟轮子行为
********************************************************************************************
这些类的继承关系:
AbstractCollection 所有群组的抽象类
Composite 可以包含粒子和碰撞的复合物类
Group 一个组的类,可以包含粒子、碰撞、复合物
AbstractItem 所有相互作用(碰撞)、粒子的基类
AbstractConstraint 所有物理相互作用的的抽象类
SpringConstraint 两个粒子之间类似弹性碰撞的类(弹簧)
AbstractParticle 关于粒子的基类
RectangleParticle 矩形粒子
CircleParticle 圆形粒子
WheelParticle 一个粒子,模拟轮子行为
APEngine 主引擎、力的类
Vector 力
OK,对这个物理引擎,我们已经有了初步认识了,下面我们就利用它实现一个简单的小例子,同时了解它的用法:
先看下这个例子的效果:
用WSAD可以给其中一个球的轴方向加力,这个球的质量有别于其他的球。
下面的几个按钮可以给整个容器加力,先试一下效果吧~ ^&^
http://blog.5d.cn/user47/hzq1122/upload/2008-06/myP.swf
***************************************************************************************************************
下面开始制作:
我用的工具是Flex,所以以Flex制作为例,如果还没安装,就搜一下,尽量安装eclipse的Flex插件版
****************************************************************************************************************
这里我建了1个类,作为边界框。代码如下:
package
{
import org.cove.ape.*; //导入包
public class Floor extends Group
{public function Floor(){
//定义矩形粒子,括号内参数依次为:横坐标,纵坐标,宽度,高度,弧度,是否固定。var diban1:RectangleParticle=new RectangleParticle(250,0,400,10,0,true)var diban2:RectangleParticle=new RectangleParticle(250,400,400,10,0,true)var diban3:RectangleParticle=new RectangleParticle(50,200,400,10,Math.PI/2,true)var diban4:RectangleParticle=new RectangleParticle(450,200,400,10,Math.PI/2,true)
//矩形粒子的父类AbstractItem的setStyle方法。diban1.setStyle(1,0x006699,1,0x663366,1)diban2.setStyle(1,0x006699,1,0x663366,1)diban3.setStyle(1,0x006699,1,0x663366,1)diban4.setStyle(1,0x006699,1,0x663366,1)
//添加该粒子,(就当它是addChild理解吧)addParticle(diban1);addParticle(diban2);addParticle(diban3);addParticle(diban4);}
}
}
ok,边界框的类写完了。下面写mxml文件。
****************************************************************************************************************
源码:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" applicati>
<mx:Script><![CDATA[import mx.core.UIComponent;import org.cove.ape.*;
//Flex需要UIComponent做容器,所以定义一个作为物理引擎的容器private var APEcontent:UIComponent;private var heros:Groupprivate var floors:Floorprivate var others:Arrayprivate var hero:CircleParticleprivate function GameTest():void {
//帧频设高点会更流畅。stage.frameRate = 100heros=new Group();floors=new Floor();others=new Array();APEcontent = new UIComponent();addChild(APEcontent)APEngine.init(0.25);APEngine.container=APEcontent;//定义10个球for (var i:int=0;i<10;i++){var other:Group=new Group()APEngine.addGroup(other)other.addParticle(new CircleParticle(Math.random()*100+50,Math.random()*100+20,10))others=other
//使这个球与组内的其他成员产生作用other.addCollidableList(others)}APEngine.addGroup(heros);hero=new CircleParticle(150,20,10,false,2);heros.addParticle(hero)
//使这个hero与others内的成员产生作用heros.addCollidableList(others)APEngine.addGroup(floors);floors.addCollidable(heros)
//同上类似floors.addCollidableList(others)stage.addEventListener(KeyboardEvent.KEY_DOWN,onD);stage.addEventListener(Event.ENTER_FRAME,onF);}public function onD(e:KeyboardEvent):void {switch (e.keyCode) {case "W".charCodeAt() :hero.addForce(new Vector(0,-3));
//addForce和addMasslessForce的区别,在于是否忽略质量//hero.addMasslessForce(new Vector(0,-3));break;case "S".charCodeAt() :hero.addForce(new Vector(0,3));break;case "A".charCodeAt() :hero.addForce(new Vector(-3,0));break;case "D".charCodeAt() :hero.addForce(new Vector(3,0));break;}}public function onF(e:Event):void {//重绘APEngine.step();APEngine.paint();}
//建立几个按钮,点击执行如下方法private function left():void{APEngine.addMasslessForce(new Vector(-3,0));}private function right():void{APEngine.addForce(new Vector(3,0));}private function up():void{APEngine.addForce(new Vector(0,-3));}private function down():void{APEngine.addForce(new Vector(0,3));}private function nothing():void{APEngine.addForce(new Vector(0,0));}]]>
</mx:Script>
<mx:Button x="10" y="410" label="left" click="left()"/>
<mx:Button x="64" y="410" label="right" click="right()"/>
<mx:Button x="125" y="410" label="up" click="up()"/>
<mx:Button x="173" y="410" label="down" click="down()"/>
<mx:Button x="237" y="410" label="nothing" click="nothing()"/>
</mx:Application>
****************************************************************************************************
这个过程就完成了,再提一下AbstractParticle 这个类最常用的属性和方法
center : Vector
[read-only] Returns A Vector of the current location of the particle
返回加在当前对象身上的力
collidable : Boolean
Determines if the particle can collide with other particles or constraints.
决定当前粒子是否与其他粒子或作用产生作用
elasticity : Number
The elasticity of the particle.
弹性
fixed : Boolean
The fixed state of the particle.
是否固定
friction : Number
The surface friction of the particle.
粒子表面摩擦力
mass : Number
The mass of the particle.
质量
px : Number
The x position of this particle
py : Number
The y position of this particle
*************************************************************************************************************
现在你可以延伸一下,尝试着做出一个类似台球的游戏了!简单吧!
拙漏之处,请指正。。 ^ ^
********************************************************************************************
原文地址:http://blog.5d.cn/user47/hzq1122/200806/488354.html
AS3物理引擎APE试用
以前就听说过APE啦,只不过没去研究过它,而且中文资料N少。下午去N神的BLOG偶尔又看到这个东东,决定研究一下。 APE相对来说比较简单,总共就12个类。以下代码显示了物体做自由落体运动,与另一物体发生碰撞的过程,基本没什么难度~只是APE的试用而已,开发工具为FLEX3。详细的说明见注释。 运行演示:http://www.d5power.com/?p=140
复制代码 运行演示:http://www.d5power.com/?p=140 FLASH的物理引擎.应用好像并不多.不过拿来玩玩也挺不错的..如果能够应用得好的话.放到游戏中效果应该不错.. 目前我知道的FLASH 2d物理引擎,应用比较多的大概就是Box2D和APE了..而Box2D虽然强大.但是太过于复杂了..所以本人也就选择了轻量级的APE了..简单好学.效果也并不差... 题外话.在GoogleCode上面有修改版.所以网上的教程有的出错的原因就是在于你的版本可能和教程作者的版本不同..我目前使用的是GoogleCode上面的修改版.其实就是先下载上面网站的alpha 0.45版.然后下载http://ape.googlecode.com/svn/trunk/source/org/cove/ape/这里的文件覆盖一下你下载的alpha 0.45版就行了.. 在本文的结尾我会将已经下载并覆盖的版本用附件上传..当然如果能够上传的话..呵呵.. 接下来.因为也是今天才刚接触了下APE.如果有不对的地方请高手多指点.大家一起进步..目前这还只是个初级教程.. APE的使用步骤.我归纳为5步.具体有哪5步呢?我列出一段代码并添加注释..
复制内容到剪贴板
代码:
代码看起来很多..实际上大家看一下我归纳的5步..并不复杂..这样就构建了一个简单的物理世界...快复制代码到flash的第一帧上去导出看效果吧.记得语言版本是AS3.0 哦!~ |
APE 2D物理引擎使用相关推荐
- 关于2d物理引擎box2d与ape的评论
APE不行,做点简单的撞球,台球之类游戏还行.我最开始用他实验性做了个简单的基于物理引擎的泡泡龙类游戏,发现稍微多一点的几何体堆叠在一起就会产生渗透现象,没办法只好更改最初的设计.要专注做物理游戏,还 ...
- 制作简单的2D物理引擎(零)
最近发现了Github上的开源物理引擎项目Matter.js,对它很感兴趣,发现源码并不算长,算上注释大约1万行左右,值得剖析一番.Matter.js实现一个最小化的2D物理引擎,性能不错,故打算用C ...
- python 物理引擎 摩擦力_参赛作品2-phenom的2D物理引擎
全球图形学领域教育的领先者.自研引擎的倡导者.底层技术研究领域的技术公开者,东汉书院在致力于使得更多人群具备内核级竞争力的道路上,将带给小伙伴们更多的公开技术教学和视频,感谢一路以来有你的支持.我们正 ...
- 2D物理引擎--谁碰了我的奶酪
人生犹如"迷宫",每个人都在其中寻找各自的"奶酪"--稳定的工作.身心的健康.和谐的人际关系.甜蜜美满的爱情,或是令人充满想象的财富-- 那么,你是否正在享受你 ...
- Unity Physics2D 2d物理引擎游戏 笔记
2d 材质 里面可以设置 摩擦力 和 弹力 Simulated:是否在当前的物理环境中模拟,取消勾选该框类似于Disable Rigidbody,但使用这个参数更加高效,因为Disable会销毁内部产 ...
- as3 physaxe 2d 物理引擎
http://drawlogic.com/2008/04/06/physaxe-2d-flash-physics-kit-for-haxe-and-list-of-flash-flex-actions ...
- 了解Nape 2d物理引擎 第一天
首先 谢谢拉登大叔 预览效果 AS3代码 package {import flash.display.Sprite;import flash.events.Event;import flash.eve ...
- Ophone平台2D游戏引擎实现——物理引擎(一)(二)
http://dev.10086.cn/cmdn/wiki/index.php?doc-view-4271.html http://dev.10086.cn/cmdn/wiki/index.php?d ...
- 主流Flash物理引擎分析
最近研究物理引擎,对网上能找到的开源物理引擎做了一下比较,完整的分析报告没有放出来,只放一些分析资料. (一) 2D物理引擎 1. Box2D A. 地址:http://box2dflash.sour ...
最新文章
- MySQL性能测试工具 mysqlslap
- 再见了,收费的 Navicat!
- CFLAGS,CPPFLAGS,CXXFLAGS in Makefile
- Hello World!!
- Ado.net连接池 sp_reset_connection 概念
- 关于Android Studio dependencies 缓存的问题
- Java Object类中的finalize()方法
- 领域应用 | 智能导购?你只看到了阿里知识图谱冰山一角
- python的cubes怎么使用_Python之Cubes框架使用
- 9年经验,总结SEO职业瓶颈
- GPS NMEA协议,0183 定位数据格式 	双模定位:GNXXX GPS+BD 完整版
- 大学生职业生涯规划书性格特征_大学生职业生涯规划书自我分析
- 什么是Hadoop以及Hadoop集群
- GB28181实现对安防摄像头的直播回放控制
- 【懒懒的Python学习笔记二】
- .net4.0 使用低版本生成的dll, 混合模式程序集市针对V1.1.4322,无法在 4.0 运行时中加载该程序解决办法
- 一个产品经理,写下的30条调皮经验
- 2022初级会计实务教材读书笔记
- 25年,100亿美元!人类「第二只眼」韦伯望远镜升空,寻找宇宙开天辟地那束光...
- edb的安装以及带参数使用