DFdou's Blog Life is short,Be yourself.

903/100

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里自己处理。

1612/090

AS3-StringParser 繁简体火星文转换

先来个Demo:

关于火星文,其实我有很多关于脑残的话要说,不过这里不谈火星文和脑残的关系,只谈前端开发的时候会碰到火星文的问题。
啥么?你说啥时候会碰到啊?
比如脏话过滤的时候,比如是否汉字判断的时候。
这个就要说到火星文的产生,以及编码段,大家自个儿去查wiki去。
别只顾着鄙视90后和火星文的存在,网站是需要兼容的,understand?

2611/091

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

2411/090

AS3-SharedObject Flash的Cookie

该从何讲起呢,,先说浏览器的Cookie吧,可以方便的记录一些东西,但是Flash就比较麻烦了,如果要操作Cookie,还得借助其他语言,js,php,asp?着实有点让人不爽,不过Adobe给了个SharedObject给大家玩,借助这个东西保存客户端的信息就比较easy了,来,咱来看个Demo:

Demo代码:

import org.nwhy.utils.*;
init();
function init() {
	var ckie:FlashCookie=new FlashCookie("nwhy");
	if (ckie.data.txt) {
		txt.text=ckie.data.txt;
	} else {
		txt.text="暂无数据";
	}
	btn.addEventListener(MouseEvent.CLICK,saveCookie);
	function saveCookie(_e:MouseEvent) {
		ckie.data.txt=txt.text;
		ckie.flush();
	}
	btnClear.addEventListener(MouseEvent.CLICK,clearCookie);
	function clearCookie(_e:MouseEvent) {
		ckie.clear();
	}
}

是不是跟Cookie一样顺手?

2311/093

AS3-Captcha验证码类

忽然想做个Flash版的验证码,于是就做了,先来看下Demo:

哈哈,是不是觉得最后那个验证码很变态=。=

2011/090

AS3-Effect explode 图片爆炸效果

这个需求是昨天碰到的,怎么说呢,怪怪的,主要是想不出可以模拟爆炸效果的公式。
先来看Demo:

1611/096

Air-fWeather Google Weather Api使用例子

需要Flash Player9+,如果你看到这段文字,请点击下边的图片链接更新您的Flash Player,或者直接下载Air文件进行安装。
get_flash_player

AIR程序下载地址(需要先安装AIR运行时):http://nwhy.org/nwhy/fDEV/fWeather.air.
fWeather
不知道为什么,Google Weather Api的说明文档一直没有找到,难道现在连Lab状态都不是?
这次是用Flash CS4做的AIR程序,发布的时候发现Flash在生成xml配置文件的时候存在一点问题啊……

1211/090

AS3-视频拍照功能

Demo:


下载地址:http://dl.dropbox.com/u/477487/flash/as3/AvatarEdit.rar,呵呵,老规矩,豆腐不保证这个链接的永久有效性哈哈。

711/093

Air-fLing 小闹钟程序

需要Flash Player9+,如果你看到这段文字,请点击下边的图片链接更新您的Flash Player,或者直接下载Air文件进行安装。
get_flash_player

AIR程序下载地址(需要先安装AIR运行时):http://nwhy.org/nwhy/fDEV/fLing.air.
唉,昨天的时候本来想去参加淘宝的秒杀活动,看中了一个被子和砂锅。
结果因为太忙完全忘记了这回事,当我想起来的时候活动已经结束一个多小时,打开网页一看,东西都已经没了!
最近正好在弄Flex,就做了这么个玩意儿,问了下BOSS叶,闹钟,Alarm?
直译有点僵硬,换个名字,就叫fLing吧,比较喜欢这个。
fLing使用很简单,选择一个时间,然后设置闹铃就可以了,到点的时候会提示。
PS:闹铃铃声在安装目录下的assets\media\alert.mp3,要换的自己动手~
fLing
什么时候可能会需要fLing呢?秒杀的时候,微波的时候,煲汤的时候?

Tagged as: , , 3 Comments
2710/091

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;
}
1809/090

AS3-SteeredVehicle.flock()群落行为分析

Demo:


先来看看什么是群落,来自wikipedia的解释是:

群落 (Biocoenosis)或称为“生物群落”。指的是生态学中,在一个群落生境内相互之间具有直接或间接关系的所有生物,或曰生物的总合。也有人作如下定义:生存在一起并与一定的生存条件相适应的动植物的总体。群落生境是群落生物生活的空间。一个生态系统则是群落和群落生境的系统性相互作用。
从定义可知,它是由在一个群落生境里生活的动物群落和植物群落,也称为生物系统组成的。生物地理群落是生物和地理因素,就是说无生命的环境的总和。这些关系的总和则是生态系统。这个概念1877年由卡尔·奥古斯都·莫比奥斯提出,他将一个牡蛎海岸上的所有生物称作“生物社区”或是“生物群落”。
一个群落的生物物种占据不同的小生境。一个群落的生物相互之间有着不同的关系。

Demo中的机车们就是一个群落。

Tagged as: Continue reading
1709/090

AS3-SteeredVehicle.followPath()路径跟随行为分析

Demo:


PS:请点击鼠标左键建立路径点。

1609/090

AS3-SteeredVehicle.avoid()回避行为分析

Demo:


今天的内容是回避行为avoid(),先引用书中的文字来说明下回避行为:

对象回避主题的完整意义是指,在机车行走的路线中存在一些障碍物,机车必须绕开、防止触碰到它们。听上去和碰撞检测有关,然而这仅仅是发生在预测阶段,也就是:“以我当前的速度行驶下去,可能就会撞到它了。”

“回避行为”和“避开行为”、“躲避行为”都有所区别,“避开”和“躲避”都是针对单个目标的,而且机能方面“回避行为”更为复杂。

Tagged as: Continue reading
1509/090

AS3-SteeredVehicle.wander()漫游行为分析

Demo:

1409/090

AS3-SteeredVehicle带转向力的机车类

先来Demo:

Page 1 of 512345