很怪异的一个现象,还是我当年做的第一个Flash的游戏(就帖子下面这个Flash),发现他竟然在Mac上运行不好,没有报错,也没死掉,只是小动物怎么也跳不上去,但是在PC上运行都是正常的。搞得我很郁闷,怎么同一个程序在只是不同操作系统的同一个版本的Flash Player上还会出这种诡异的事。 今天早上拿来一个MacBook,开始调试,倒看看问题出在哪了,到处都加的“trace”,到最后发现是一个“if”语句那边出了问题,在看这个判断,里面的条件是一个比较大小的表达式,是底图的“y”坐标和一个“Number”型的值得比较,问题就是出在这了,PC上面认为两个值相差很小但是还是不等的,不过到了Mac上,两个值竟然完全一样,有点晕,程序是好久前的了,也没再细细看到底哪个算的是对的了。只是把这个也不知道是我程序的Bug(或许是Adobe Flash Player的Bug)改了过来。嘿嘿,下次再遇到这种情况,就不会再觉得太诡异了。一句话,Flash里什么样的错误都可能出现。
昨天无意中发现补间动画与补间形状之间的一个小的差别,在补间动画运动的过程中整个MovieClip的大小是随动画的运动变化的,如果动画被放大了或者是缩小了,那承载他的MovieClip的宽和高也会随着变。 不过,补间形状就不一样了,在补间形状运动的过程中,承载他的MovieClip的宽和高是不会因为内部的补间形状的变化而变化的,直到运动到补间动画的关键帧上,承载他的MovieClip的宽和高才会根据最后一帧的补间形状改变。
找了一下flash的帮助文档,就是没找到这个方法,不过你确实是可以调用这个方法的。比如: var mc = new MovieClip(); mc.addFrameScript(1, function(){}); 在一个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就出现了一个怪异的问题,SWFAddress.setValue(“XXX”);调用后,URL怎么也不改变,不知道什么原因,后来发现如果把这句放在SWFAddress.onChange的事件侦听中就是正常的。想不明白,查看他的代码发现了这么一段: private static function _check():void { if ((typeof SWFAddress['onInit'] == ‘function’ || _dispatcher.hasEventListener(‘init’)) && !_init) { SWFAddress._setValueInit(_getValue()); SWFAddress._init = true;…
这两个搞了一个flash,因为项目比较大,所以我想将一些较为基础的类的代码打到一个包里,本以为很简单的事情,搞了半天也没搞出来。我是用的flex 3做的开发。 问题是,如果将所有的类放到一个 actionscript project 中,Flex 在编译时,事实上并不会将本项目文件夹下的所有类代码都包进来,它似乎只关心它要用到的一些代码。这一点跟VS是完全不一样的。我想或许哪边有这一个选项的设置,可惜找了半天也没找到,试着用flash编译项目,也是一个样的。晕死… actionscript project 搞不定就重搞了一个 flex library project, 不过发现也是有问题的,我是想让它生成.swf的文件,不过flex library project默认是在bin文件夹下生成一个.swc的文件。得解压了才会出现一个library.swf,这还是不能满足我的要求。后来发现可以通过设置一些编译的参数来达到目的,不过,文件名还是叫library.swf,只是不是将它跟另一个文件打包成一个.swc文件,而是放到一个目录里。唉,也算是基本达到目的了吧。至于设置编译参数的参考,可以到 http://livedocs.adobe.com/flex/3/html/help.html?content=compilers_04.html 上看看,而事实上我倒是没有用这个方法,太烦,这就是我最讨厌的非微软阵营的一大特点,很多简单的事确复杂化了。我用了ant来编译的。具体方法参考 http://www.jakehilton.com/?q=node/27 ,只是这篇文章里的相应的编译参数要更改。下面代码是我的大致的设置:…
一直觉得Flash里的假3D是很丑的,不过,看了http://www.roxik.com才发现,假3D也能这么好。只可惜这个引擎没开源呀。听说Flash CS4里会支持3D,效果也不知道会怎样。不过说到底,假的就是假的,不知道就Virtools那样的效果Flash哪一天才能达到。 唉,微软的silverlight也不听说有这方面的动向。