Flash-APE物理引擎学习<二>
昨天整理了下代码,新的Demo在这里:
在说具体实现之前,丢个Flash物理引擎在产品展示中的应用:http://www.carlosulloa.com/.
这是一款汽车产品的展示平台,用方向键控制机车移动,点鼠标左键复位汽车初始位置。
不过,这个不是2d物理引擎完成的,而是基于PV3D的,,,,恩,3D物理引擎是在比较难搞……有时间尝试整理下……
下边来说下Demo的具体实现,首先要收下物理引擎,物理引擎是干嘛用的呢?
物理引擎是一个处理物理现象的引擎。
那什么是物理现象呢?
举个例子,一个风筝在天上飞,它会受到风力,阻力,摩擦力,还有重力,绳子的作用力,etc。。。而物理引擎就是帮你处理这些力的一个框架集。
你要做的就是给它个重力,然后都作用在风筝上,至于这些里之间的相互作用,都由引擎来搞定。
下边来代码,先是文档类,也就是主容器了:
package org.nwhy.bubble_bobble{
import flash.display.*;
import flash.events.Event;
import org.cove.ape.*;
public class BubbleBobble extends Sprite{
private var bulletHolder:Group;
public function BubbleBobble(){
init();
}
private function init(){
initStage();
initGroups()
}
private function initStage(){
stage.scaleMode = StageScaleMode.NO_SCALE;//设置为不缩放
//stage.align = StageAlign.TOP_LEFT;
stage.frameRate = 55;//设置帧频
stage.addEventListener(Event.ENTER_FRAME, run);
}
private function initGroups(){
//初始化2D物理引擎
APEngine.init(1/4);
APEngine.container = this;
APEngine.addForce(new VectorForce (false,0,1));//加上重力
//放bullet的容器,bullet就是那个各种颜色的球~
bulletHolder = new Group(true);
APEngine.addGroup(bulletHolder);
//加入墙壁
var wall:Wall = new Wall();
APEngine.addGroup(wall);
//gun,就是下边那个大伯说有点像啥的那个啥……囧一个
var gunGroup:GunGroup = new GunGroup(stage);
APEngine.addGroup(gunGroup);
//设置bullet的碰撞检测内容
bulletHolder.addCollidableList(new Array(wall,gunGroup));
}
private function run(e:Event) {
APEngine.step();
APEngine.paint();
}
//增加bullet的对外接口
public function addBullet(bullet:CircleParticle){
bulletHolder.addParticle(bullet);
}
}
}
这里边干的事就是加入各种Group(APE物理引擎里的碰撞单元是Particle,单个或多个Particle组成Group),至于Group里具体是啥Group里自己处理。
AS3-StringParser 繁简体火星文转换
先来个Demo:
关于火星文,其实我有很多关于脑残的话要说,不过这里不谈火星文和脑残的关系,只谈前端开发的时候会碰到火星文的问题。
啥么?你说啥时候会碰到啊?
比如脏话过滤的时候,比如是否汉字判断的时候。
这个就要说到火星文的产生,以及编码段,大家自个儿去查wiki去。
别只顾着鄙视90后和火星文的存在,网站是需要兼容的,understand?
AS3-Caurina 动画类
今天玩了下Caurina类,和TweenLite的差别并不大,具体哪个好用,对我来说,TweenLite更熟悉点=,=
而老外(尤其是日本人)的Flash破解出来基本都是Caurina来作为Tween类,因为Caurina开源的关系么?
Caurina官方地址如下:http://hosted.zeh.com.br/tweener/docs/en-us/。
类包下载地址:http://code.google.com/p/tweener/downloads/list,看好版本再下载哈。
最简单的动画代码如下:
import caurina.transitions.Tweener;
Tweener.addTween(clip_mc,{x:500,time:1,transition:"easeOutBounce"});
让clip_mc的x位置花1s的时间运动到500位置,动画的ease为easeOutBounce。熟悉TweenLite的应该很快就可以熟悉Caurina了。至于addTween的详细参数,,自己看文档去~
下边来个结合Timer的Demo,来自flepstudio.org。
Air-fWeather Google Weather Api使用例子
AIR程序下载地址(需要先安装AIR运行时):http://nwhy.org/nwhy/fDEV/fWeather.air.

不知道为什么,Google Weather Api的说明文档一直没有找到,难道现在连Lab状态都不是?
这次是用Flash CS4做的AIR程序,发布的时候发现Flash在生成xml配置文件的时候存在一点问题啊……
AS3-视频拍照功能
Demo:
下载地址:http://dl.dropbox.com/u/477487/flash/as3/AvatarEdit.rar,呵呵,老规矩,豆腐不保证这个链接的永久有效性哈哈。
Air-fLing 小闹钟程序
AIR程序下载地址(需要先安装AIR运行时):http://nwhy.org/nwhy/fDEV/fLing.air.
唉,昨天的时候本来想去参加淘宝的秒杀活动,看中了一个被子和砂锅。
结果因为太忙完全忘记了这回事,当我想起来的时候活动已经结束一个多小时,打开网页一看,东西都已经没了!
最近正好在弄Flex,就做了这么个玩意儿,问了下BOSS叶,闹钟,Alarm?
直译有点僵硬,换个名字,就叫fLing吧,比较喜欢这个。
fLing使用很简单,选择一个时间,然后设置闹铃就可以了,到点的时候会提示。
PS:闹铃铃声在安装目录下的assets\media\alert.mp3,要换的自己动手~

什么时候可能会需要fLing呢?秒杀的时候,微波的时候,煲汤的时候?
AS3-如何加载自身SWF
先看Demo,顺便介绍下MP3切割工具一枚"mp3spliter",再顺便鄙视下PR被降权了……
我们来看一下代码:
stop();
var tf_loadinfo:TextField = new TextField();
tf_loadinfo.autoSize = TextFieldAutoSize.CENTER;
tf_loadinfo.selectable=false;
tf_loadinfo.background = true;
var format:TextFormat = new TextFormat();
format.font = "Arial";
format.size = 12;
tf_loadinfo.defaultTextFormat = format;
addChild(tf_loadinfo);
root.loaderInfo.addEventListener(ProgressEvent.PROGRESS, showProgress);
root.loaderInfo.addEventListener(Event.COMPLETE, loadComplete);
function loadComplete(_e:Event):void {
removeChild(tf_loadinfo);
play();
}
function showProgress(_e:ProgressEvent):void {
var p:Number=_e.bytesLoaded/_e.bytesTotal;
var n:Number=Math.round(p*100);
tf_loadinfo.text='Loading '+n.toString()+'%';
setCenter(tf_loadinfo);
}
function setCenter(obj:Object) {
obj.x =(stage.stageWidth-obj.width)/2;
obj.y =(stage.stageHeight-obj.height)/2;
}
AS3-SteeredVehicle.flock()群落行为分析
Demo:
先来看看什么是群落,来自wikipedia的解释是:
群落 (Biocoenosis)或称为“生物群落”。指的是生态学中,在一个群落生境内相互之间具有直接或间接关系的所有生物,或曰生物的总合。也有人作如下定义:生存在一起并与一定的生存条件相适应的动植物的总体。群落生境是群落生物生活的空间。一个生态系统则是群落和群落生境的系统性相互作用。
从定义可知,它是由在一个群落生境里生活的动物群落和植物群落,也称为生物系统组成的。生物地理群落是生物和地理因素,就是说无生命的环境的总和。这些关系的总和则是生态系统。这个概念1877年由卡尔·奥古斯都·莫比奥斯提出,他将一个牡蛎海岸上的所有生物称作“生物社区”或是“生物群落”。
一个群落的生物物种占据不同的小生境。一个群落的生物相互之间有着不同的关系。
Demo中的机车们就是一个群落。
AS3-SteeredVehicle.avoid()回避行为分析
Demo:
今天的内容是回避行为avoid(),先引用书中的文字来说明下回避行为:
对象回避主题的完整意义是指,在机车行走的路线中存在一些障碍物,机车必须绕开、防止触碰到它们。听上去和碰撞检测有关,然而这仅仅是发生在预测阶段,也就是:“以我当前的速度行驶下去,可能就会撞到它了。”
“回避行为”和“避开行为”、“躲避行为”都有所区别,“避开”和“躲避”都是针对单个目标的,而且机能方面“回避行为”更为复杂。
