skip to main |skip to sidebar

2008-01-07

[AS3]pixelDissolve 有 Bug?

最近发现使用 BitmapData.pixelDissolve 溶解像素时,无论 randomSeednumOfPixels 参数是多少,sourceRect 指定的矩形的左上角一定会被溶解!

比如设定为溶解 10 个像素时,左上角 + 剩下的像素中取 10 个会变化。设为溶解 0 个时,只有左上角会变化。

例子: 可以看到左上角很不自然。

例子的代码:

package {
import flash.display.*;
import flash.events.Event;
import flash.geom.*;

[SWF(width="32",height="32")]
public class Test2 extends Sprite{
public function Test2():void {
var bitmap:BitmapData = new BitmapData(32, 32, false,0);
var seed:int = 0;
addChild(new Bitmap(bitmap));
addEventListener(Event.ENTER_FRAME,
function (event:Event):void {
seed = bitmap.pixelDissolve(bitmap, bitmap.rect, new Point(0,0),
seed, 5, Math.random()*0x1000000);
}
);
}
}
}

我用的 Flash Player 的版本是 9.0.115.0。

2008-01-06

[AS3]加载大于 2880px 的图片的方法

Flash Player 在加载大于 2880px 的图片时,大于 2880px 的区域将会被剪掉!2880px 这个限度虽然一般不小,但对某些开发来说,却是一堵又高又大的墙。

但在 AS3.0 里,却是可以办到的!使用 URLStream 加载后,用 Loader.loadBytes 来显示

通过二进制的加载,会忽视外部域名的图片的安全沙箱。也就是说可以随便 draw 了。但注意加载本身是需要 crossdomain.xm了的。

2008-01-04

ActionScript Snippets 开通了

ActionScript Snippets 是一个收集 Advanced Flex Project 在开发时有用的代码、类的博客。

代码均遵循 Apache License 2.0。希望对大家有所帮助。

地址:ActionScript Snippets

2008-01-03

解决 Firefox 播放 Flash 时无法移动 Tab 的问题

使用 Firefox 播放重的 Flash 时有时会出现无法移动、关闭 Tab,像是没有响应了一样。这时只需要新开一个标签,就恢复响应了。

2007-12-31

2007年,我 blog 的一年总结

谢谢大家对我 Blog 的关注。我的 Blog 自从 2007-3-24 开通以来,今年共写了 116 篇文章(包含本篇),总共4655人访问

访问内容排行榜

  1. 主页 —— 1121人访问
  2. Fedora 7(Linux)之旅 —— 150人访问
  3. Flex2 Tag for JSP —— 118人访问
  4. [AS3]位图的色阶控制(2) -- 伽玛校正(Gamma Correction) —— 101人访问
  5. Flash CS3 = Flash 8 + AS3.0 + CS3 UI ? —— 92人访问

文章内容排行榜

  1. ActionScript 类 —— 27篇
  2. AIR 类 —— 16篇
  3. flash 类 —— 11篇
  4. flex 类 —— 10篇

历史回顾

2007-12-29

MXNA最近很怪

最近,MXNA 上有很多垃圾信息。

今天中午去查看 Google Reader 时,发现从昨天晚上到今天中午,MXNA 的中文内容有102条。其中"自由鸟的BLOG"与"windflower"占了大多数。其中包含了大量的广告信息。

我一气之下把 MXNA 的中文内容退订了!

2007-12-26

[AI]高级人工智能(2)——结合队伍

[AI]高级人工智能(1)——回避障碍物

结合队伍就是诱导各个人到周围的人的平均位置。这是队伍一起行动的三大步骤之一。通过结合,各个人就会聚合到一起,出现队伍。

效果:

人刚开始是随机移动,但遇到其他的人时,就会跟随他。但碰到障碍物等时有可能无法跟上,而又开始随机移动。当一群(boids)遇到另外一群时有可能结合在一起,也有可能队员发生互换后分开。

得到周围的人

每一个人有一个视野距离与视野范围。比如某个机器人可以看到 100m ,眼睛的夹角在120度 以内的物体。其中"100m"为视野距离(以下称为 r),"120度"为视野范围(以下称为 th)。

核心代码:

//周围的人列表。
internal var aroundList:Array;

//可视列表。
internal var inViewList:Array; //创建可视列表。
public function resetViewList():void {
inViewList = [];
aroundList = [];
for each(var u:C2Unit in onwer.unitsList) {
if(!u.following && u != this) {
if(inAround(u)) {
aroundList.push(u);
if(inView(u)) {
inViewList.push(u);
}
}
}
}
} //判断是否在周围。
public function inAround(u:C2Unit):Boolean {
if(Vector2d.distance(pos, u.pos) > VIEW_DISTANCE) {//VIEW_DISTANCE 为 r
return false;
}
return true;
}

//判断是否在视野范围内。
public function inView(u:C2Unit):Boolean {
var dsu:Vector2d = new Vector2d().sub(u.pos, pos);//dsu = u - pos (pos为自己的坐标)
if(dsu.angle2(pos)>VIEW_WIDTH) {//VIEW_WIDTH 为 th/2
return false;
}
return true;
}

结合

实现结合,其实很简单,就是把速度(方向和长度)设为周围的人的平均速度即可。

核心代码:

//结合。
internal function follow():void {
if(inViewList.length) {
var avg:Vector2d = new Vector2d();
for each(var u:C2Unit in inViewList) {
avg.addTo(u.v);
}
avg.scaleTo(1/inViewList.length);
v.reset(avg);
following = true;
}else{
following = false;
}
}

完整源码下载:结合队伍.rar,或访问我的附件