Monthly Archives: July 2008

诡异,Flash在Mac和PC的不一样的执行结果

  很怪异的一个现象,还是我当年做的第一个Flash的游戏(就帖子下面这个Flash),发现他竟然在Mac上运行不好,没有报错,也没死掉,只是小动物怎么也跳不上去,但是在PC上运行都是正常的。搞得我很郁闷,怎么同一个程序在只是不同操作系统的同一个版本的Flash Player上还会出这种诡异的事。
  今天早上拿来一个MacBook,开始调试,倒看看问题出在哪了,到处都加的“trace”,到最后发现是一个“if”语句那边出了问题,在看这个判断,里面的条件是一个比较大小的表达式,是底图的“y”坐标和一个“Number”型的值得比较,问题就是出在这了,PC上面认为两个值相差很小但是还是不等的,不过到了Mac上,两个值竟然完全一样,有点晕,程序是好久前的了,也没再细细看到底哪个算的是对的了。只是把这个也不知道是我程序的Bug(或许是Adobe Flash Player的Bug)改了过来。嘿嘿,下次再遇到这种情况,就不会再觉得太诡异了。一句话,Flash里什么样的错误都可能出现。

Flash益智游戏,看你能否通关

  今天再发一个我做的Flash益智小游戏,方向键控制小方块,目标是滚到指定的方格内,很耐玩的游戏,开动你的脑筋,挑战你的智商吧。注意,方向键控制小方块,但是对小方块的控制效果可能不同,比如左键正常是控制小方块左移的,不过,有时却是右移。所以要小心哦!

补间动画与补间形状之间的一个差别

  昨天无意中发现补间动画与补间形状之间的一个小的差别,在补间动画运动的过程中整个MovieClip的大小是随动画的运动变化的,如果动画被放大了或者是缩小了,那承载他的MovieClip的宽和高也会随着变。
  不过,补间形状就不一样了,在补间形状运动的过程中,承载他的MovieClip的宽和高是不会因为内部的补间形状的变化而变化的,直到运动到补间动画的关键帧上,承载他的MovieClip的宽和高才会根据最后一帧的补间形状改变。

MovieClip.addFrameScript又一个文档里面没写方法

找了一下flash的帮助文档,就是没找到这个方法,不过你确实是可以调用这个方法的。比如:
[as3]
var mc = new MovieClip();
mc.addFrameScript(1, function(){});
[/as3]
在一个fla的时间轴上增加这个代码测试,嘿嘿,竟然没错,说明确实是有这个方法的,那他的作用是做什么的呢?其实从他的名字一眼就可以看出,就是在MovieClip的相应的帧上添加代码,这个你直接在时间轴上添加代码是一个样的,举个例子来说。mc.addFrameScript(0, fun); 这样的代码的意思就是在mc这个MovieClip的第一帧上添加fun这个名字的方法。这里的0就是指我们在mc时间轴上的第一帧,这个下标是从0开始的。

有了这个方法就可以动态往时间轴上添加代码了。http://www.gskinner.com/blog/archives/2007/11/replace_actions.html 这里有一个开源的类库,可以用来实现向某一帧上添加代码,其实就是调用了addFrameScript方法。

SWFAddress使用中URL无法改变的问题

刚使用SWFAddress就出现了一个怪异的问题,SWFAddress.setValue(“XXX”);调用后,URL怎么也不改变,不知道什么原因,后来发现如果把这句放在SWFAddress.onChange的事件侦听中就是正常的。想不明白,查看他的代码发现了这么一段:
[as3]
private static function _check():void {
if ((typeof SWFAddress[‘onInit’] == ‘function’ || _dispatcher.hasEventListener(‘init’)) && !_init) {
SWFAddress._setValueInit(_getValue());
SWFAddress._init = true;
}
if (typeof SWFAddress[‘onChange’] == ‘function’ || _dispatcher.hasEventListener(‘change’)) {
clearInterval(_interval);
SWFAddress._init = true;
SWFAddress._setValueInit(_getValue());
}
}
[/as3]
看来是在没有增加“onChange”事件侦听的话是不能正常工作的了。
[as3]
private static function _initialize():Boolean {
if (_availability) {
ExternalInterface.addCallback(‘getSWFAddressValue’,
function():String {return _value});
ExternalInterface.addCallback(‘setSWFAddressValue’,
_setValue);
}
_interval = setInterval(_check, 10);
return true;
}
[/as3]
这里”setInterval(_check, 10)“调用了_check()方法,如果没有“onChange”事件侦听就会被认为没初始化。

Blog终于又回来了

  空间在下线三天后终于又能访问了,一开始说是空间要升级,后来又说是要接受检查,唉,也不知道到底是什么原因就直接被停了,连封Email也没有,也不说明要停多长时间。服务质量有待提高啊。之前买另一家公司的空间也是一样,只是服务态度上好了点。看来国内的空间实在是让人不放心啊,最近,申请的Paypal也通过认证了,以后看上好的国外的空间还是买国外的空间或许会好点。

博客换皮肤了

  已经用了好一阵子的苹果的皮肤了,有点审美疲劳了,昨天晚上给同学要了一个付费的皮肤,一看,竟然还有Flash,再看文档,好复杂的配置哦,太烦了,一气之下又不想换了。

  可惜半夜我被热醒了,这两天这南京的温度高,我这房间还没空调,即便睡地上也没一丝凉意,于是,又起来上网找皮肤。跑到官方的网站还有各个大大小小的皮肤网站找了个遍,就没看中一个真正满意的,唉,看来我还是个相当挑剔的人,最后,看到了现在的这款皮肤,觉得还可以,下下来改了一下就放上来了。

Audition(Cool Edit)制作循环音乐的问题

  今天在使用Audition(Cool Edit)制作循环音乐放入Flash里作为背景音乐时发现一个问题,我导出的音乐文件格式为mp3,每次制作完时听效果是正常的,不过重新打开这个mp3文件发现尾部总是有改动,不能循环起来。

  其实问题出在文件格式上,在将格式改为.wav格式后再做循环就正常了。另外,如果要将.wav格式放入Flash中,可能会出现导入错误的问题,这是因为WAV格式的文件是有多种压缩算法的,WINDOWS版本的FLASH其实只是支持标准的PCM WAV格式的WAV文件;不支持的WAV文件的格式有以下几种:CCITT A-Law, CCITT u-Law, DSP Group TrueSpeech(TM), elemediaTM AX2400P music codec, IMA ADPCM, Microsoft ADPCM, MSN Audio, and GSM 6.10. 所以只能选择保存成这种格式的wav文件。