- 浏览: 577609 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
wzh051527:
我是大四实习生一个,自我感觉技术能力在第三年。。唯一不明白,为 ...
十年技术,不要再迷茫 -
room_bb:
.hrl文件怎么加入到编译规则里面?比如:pp.hrl文件-d ...
Erlang中用的makefile的一点解释 -
吉米家:
感觉帆软报表的flash打印就很不错哇,特别好用
JSP 实现报表打印 -
雪碧爱芬达:
苦逼程序员的辛酸反省与总结 -
mlyjxx:
...
十年技术,不要再迷茫
先去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:Group
private var floors:Floor
private var others:Array
private var hero:CircleParticle
private function GameTest():void {
//帧频设高点会更流畅。
stage.frameRate = 100
heros=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的物理引擎.应用好像并不多.不过拿来玩玩也挺不错的..如果能够应用得好的话.放到游戏中效果应该不错..
复制内容到剪贴板
代码://1.导入类包 import org.cove.ape.*; import flash.events.Event; //2.初始化引擎: APEngine.init();//初始化引擎 APEngine.container = this;//指定容器; APEngine.addForce(new VectorForce(false,0,5));//添加力; //3.添加物体(粒子,约束,复合体,组...) var defaultGroup:Group = new Group();//建一个默认组; defaultGroup.collideInternal = true;//组内的对象互相之间有作用力; var a:CircleParticle = new CircleParticle(350,30,5,false);//创建一个圆形粒子; var b:CircleParticle = new CircleParticle(100,150,4,false);//创建一个圆形子; var c:RectangleParticle = new RectangleParticle(stage.stageWidth/2,stage.stageHeight-10,stage.stageWidth,10,0,true);//创建一个矩形粒子; var d:RectangleParticle = new RectangleParticle(0,stage.stageHeight/2,10,stage.stageHeight,0,true); var e:RectangleParticle = new RectangleParticle(stage.stageWidth,stage.stageHeight/2,10,stage.stageHeight,0,true); var wa: WheelParticle = new WheelParticle(150,10,15,false,2);//创建一个轮子粒子; var wb: WheelParticle = new WheelParticle(200,10,15,false,2);//创建一个轮子粒子; var wc:SpringConstraint = new SpringConstraint(wa, wb, 1, false);//创建一个约束,将两个轮子粒子连接起来; defaultGroup.addParticle(a);//在组中添加a粒子; defaultGroup.addParticle(b);//在组中添加b粒子; defaultGroup.addParticle(c);//在组中添加c粒子; defaultGroup.addParticle(d);//在组中添加d粒子; defaultGroup.addParticle(e);//在组中添加e粒子; defaultGroup.addParticle(wa);//在组中添加wa轮子粒子; defaultGroup.addParticle(wb);//在组中添加wb轮子粒子; defaultGroup.addConstraint(wc);//在组中添加约束; //<!--这里应该调用Object.setStyle()或Object.setDisplay()来显示自己想要的外观--> //4.将组添加到引擎; APEngine.addGroup(defaultGroup);//将组添加到引擎,因为组的collideInternal属性为true,所以组内部的粒子会互相产生物理作用; //5.添加侦听器.刷新粒子引擎; stage.addEventListener(Event.ENTER_FRAME, run); function run(evt:Event):void { APEngine.step(); APEngine.paint(); } //<!--额外添加代码--> import flash.events.KeyboardEvent; stage.addEventListener(KeyboardEvent.KEY_DOWN,keyHandler); stage.addEventListener(KeyboardEvent.KEY_UP,keyHandler); function keyHandler(event:KeyboardEvent) { if (event.type==KeyboardEvent.KEY_DOWN) { if (event.keyCode==Keyboard.LEFT) { wa.angularVelocity = -0.1; wb.angularVelocity = -0.1; //轮子粒子向左滚动; } else if (event.keyCode==Keyboard.RIGHT) { wa.angularVelocity = 0.1; wb.angularVelocity = 0.1; }//轮子粒子向右滚动; } else { wa.angularVelocity = 0; wb.angularVelocity = 0; //轮子粒子停止滚动; } }
代码看起来很多..实际上大家看一下我归纳的5步..并不复杂..这样就构建了一个简单的物理世界...快复制代码到flash的第一帧上去导出看效果吧.记得语言版本是AS3.0 哦!~ |
发表评论
-
as3 Loader 加载资源后内存泄露无法释放的问题。
2014-06-21 10:30 637as3 Loader 加载资源后内存泄露无法释放的问题。 ... -
as3判断flash player版本的函数
2014-06-10 20:35 796//判断当前版本是否高于9.0.115.0为例子. pr ... -
CSS 中文字体的英文名称 (simhei, simsun) 宋体 微软雅黑
2014-04-03 15:25 964华文细黑:STHeiti Light [STXihei]华文 ... -
as3.0的垃圾回收机制
2013-09-07 14:02 1461还是同样的博客,还是同样的作者(Daniel Sidhio ... -
AIR程序多开
2013-09-07 13:55 967AIR应用通常不能像QQ那样能进行多开操作。为了让一个用AI ... -
starling性能优化总结
2013-07-22 14:06 1441在项目开发的过程中总结了一下starling的性能优化方案: ... -
AS3 Socket从零开始
2013-07-22 12:54 1067大家如果想学AS3 Socket直接在百度里搜一下,会找到很 ... -
绕开AS3安全沙箱 跨域加载SWF
2013-07-11 12:53 864AS3的安全沙箱的确是 ... -
解决AS3在ie中初始化时stageWidth和stageHeight为0
2013-06-14 09:23 969先看下面的一段脚本,这是比较经典的初始化脚本: pac ... -
动态获取swc中的类
2013-05-25 10:32 909想通过代码生成,来获取swc中的类,并且可以作为普通类正常使 ... -
AS3 中字符串的format功能实现
2013-05-25 10:19 804使用C#的朋友都知道,string.Format();还是挺 ... -
总结调用Flash的几种方法
2013-05-02 16:18 1623一、Adobe 提供的方法 <object wi ... -
Flash3D错误集锦
2013-05-02 14:03 892VerifyError: Error #1014: 无法找到 ... -
使用scale拉伸之后的坐标问题
2013-04-12 09:38 1236最近发现论坛多了很多 ... -
30个实用的网页设计工具
2013-03-20 09:58 780作为一位网页设计师或开发者,你一直需要搜寻获取强大的网页设计 ... -
如何成为强大的程序员?
2013-03-11 11:27 695Aaron Stannard是新创公 ... -
漫谈重构
2013-03-11 11:09 818因为工作内容的原因, ... -
AS3使用谷歌API生成二维码
2012-12-10 16:24 1311二维码在新闻杂志,网站,网络广告,电视广告等地方随处可见 ... -
OOP的聚合原则
2012-12-10 16:21 898什么是聚合? 聚合可以很好地表达对象是什么和做 ... -
压缩速率追踪
2012-11-02 14:16 1424Flash Player 11.3添加了一个压缩和解压B ...
相关推荐
ape 开源 物理引擎,基于SDL开发
flash一些3D和2D物理引擎 BOX2D,FIVE3D,MOTOR2,FLADE,APE.
这是一个用于FLASH AS3环境下的平面2D物理引擎源码.带有例子和说明文件.于2011.1.17号下载.
APE as3 物理引擎0.5a版,简单实用的as3物理引擎。
可用的超轻量的APE物理引擎库。min文件只有38k,APE中总共才12个类,用起来相当的方便。实现了大部分物理模拟(弹性、摩擦力、牵引力等),对于初学...但相比较另一个物理引擎Box2D来说,APE还缺乏例如多边形碰撞等等。
APE物理引擎的说明文档,看清楚是文档,没有引擎,引擎大家可以去网上下,一个网友翻译的,我转载的哈。很方便,用起来超酷,能做出很真的物理效果。我很喜欢
as3 物理引擎APE中文API文档
flash的as3物理引擎,APE实例,外加一个中文版帮助文档。欢迎大家下载
APE是一个结构清晰简单的ActionScript 2D物理引擎。 APE实现了大部分物理模拟(弹性、摩擦力、牵引力等),对于初学物理引擎的同学可以从APE学起。但相比较另一个物理引擎Box2D来说,APE还缺乏例如多边形碰撞等等。
APE物理引擎中文API.pdf
APE之AS3物理引擎,是一个学习flash的好资源
解决了一个项目报错的一个BUG。并翻译成了中文。请大家下载。
物理引擎APE中文帮助
基于flash+as3.0的APE物理引擎项目实际例子,运行类是apetest,运行apetest.fla文件.
ape_a0452d物理引擎 06-21-07 Version 0.45a Two new properties for much greater stability - constraintCycles and constraintCollisionCycles Group now takes collideInternal setting as a parameter in the ...
NULL 博文链接:https://as3.iteye.com/blog/1100238
Ammo.js物理引擎 APE建立在之上,而则是使用将直接移植到JavaScript的。 它旨在与轻松使用。 演示: 下载: git clone https://github.com/UstymUkhman/APE.git cd APE yarn yarn start 建立: yarn build ...
CANape与ECU的物理接口可以是使用CCP(CAN标定协议)的CAN总线,或者是使用XCP协议的FlexRay实现。另外,通过集成的诊断功能集(Diagnostic Feature Set),CANape提供了对诊断数据和诊断服务的符号化访问。这样,...