写了这么一段as3的代码,用到了E4X,Firebug是自己写的一个用来调用Firebug的console的调试类:
var x:XML = evt.message as XML;
Firebug.info(x.toString()); // 正常输出XML内容
Firebug.info(x is XML); // true
Firebug.info(x.@status); // 没有输出,但的确是有这个属性的
莫名奇妙,不知道啥原因,翻了手册,也Google了,还是不知道啥原因。于是想想这样一试:
var x:XML = evt.message as XML;
var status:String = x.@status;
Firebug.info(x.toString()); // 正常输出XML内容
Firebug.info(x is XML); // true
Firebug.info(status); // 成功输出status属性的值“success”
真让人崩溃!为什么一开始的写法就不能输出呢?不懂,有明白的人指点下吧,谢谢!

一不小心电脑上又有这么多flashplayer的安装包了,每下载一个新版本都会清除以前的,于是就木有6、7、8了……
每个版本的flashplayer图标都在变化,总体来说是越变越“红”,除了flashplayer 8是个例外(就是这个版本第一次引入了令人惊讶的滤镜效果,很帅!)。
flashplayer的体积也随着版本的增大而增大,越来越胖了,不过相比Flash IDE的体积变化来说,这个实在是小巫见大巫,我们看看Flash IDE的变胖过程...

Flex本身是没有格式化代码功能的,但是这个确实是很常用的功能,不知道为啥Adobe一直不加这个功能。只有想不到,没有做不到,这不就有个开源的Flex插件——FlexFormatter,很好用。
下载地址:http://sourceforge.net/projects/flexformatter/
安装方法:
- 下载插件的jar文件
- 复制到Flex安装目录中的plugins文件夹中(如果用的是Eclipse 3.4以上的版本,就是dropins目录)
- 重启你的Flex,就可以看到图上的两个按钮了
JavaScript和ActionScript互相调用时,其实有个非常好的特性,不过貌似很少有人提到这个特性:它们之间的数据类型对方均可以识别。因此,你可以通过swf提供的接口来传递对象、数组、字符串等等。不过它们之间传递的参数的值的长度有限制(具体长度还没仔细测试),因此你不能把JavaScript中的一个超大的对象直接传递进去。不过即使是这样,已经非常好用了,看看示例代码:
AS(ActionScript)代码:
// 创建一个行的TextField来显示调用结果
var t:TextField = new TextField();
t.x = 10;
t.y = 10;
t.width = 300;
t.height = 200;
this.addChild(t);
// 这个是要给JavaScript调用的函数
function test(obj){
var s = [];
for(var p in obj){
s.push(p + ': ' + obj[p]);
}
t.text = s.join('\r\n');
}
// 添加调用接口
ExternalInterface.addCallback("test", test);
t.text = 'ready';
// 调用JavaScript,告诉JavaScript我已经准备好了
ExternalInterface.call('ready', {a:'a string', b:'string b'});
在AS3里面,你每次创建的一个TextField对象都有一个相同的默认TextFormat,当你每次改变这个TextField里面的文本内容时,这个里面的文本使用的格式就是默认的格式(默认的TextFormat)。比如下面的代码可能和你期待的效果一样:
var fmt:TextFormat = new TextFormat();
fmt.align = TextFormatAlign.CENTER;
fmt.color = 0xffcc00;
fmt.size = 14;
var tf:TextField = new TextField();
tf.width = 140;
tf.height = 24;
tf.text = 'This is just for test';
tf.setTextFormat(fmt);
这个时候,这个文本的颜色是橙红色,字体大小为14号,没有任何问题,和我们所期待的一样。但是如果接着你改变这个文本的内容...
需求总是不断变化的,相信有非常多的人也碰到过类似的问题:比如鼠标移到flash上就把flash放大,鼠标移开就缩小,嗯,说了半天其实这个东西就是用来做广告的。
一般的怎么做的呢?无非是在flash里面用ExternalInterface来调JavaScript,用JavaScript来调整swf的大小或者切换另一个swf,或者索性就在swf的上面覆盖一个透明层(貌似要用空白的图片才好使,否则事件还是会跑到swf里面去,而不是给这个层d),然后用这个层来捕捉事件,然后调整swf的大小。
相信很多“挑剔”的人都和我一样,嫌这个方法太麻烦,又不好看。为什么不能直接写在swf里面呢?我也不知道为什么,Adobe没有提供这个接口……不过ActionScript不是可以调JavaScript吗?而且JavaScript也可以写在ActionScript里面,干嘛不从这里打点主意呢?
很好,actionscript.org上就有一篇很好的文章讲怎么在ActionScript中注入JavaScript或者VBScript。不过,显然是有人和我们一样“挑剔”,利用这个写了一个用来改变自身大小的swf,demo在这里,这里有详细的说明和源码下载...
2009-1
示例,红颜色的是三角形的分割线。
混乱丑陋但是完整而且可以跑的测试代码(全部放在第一帧就可以了)...
转载请注明出处:http://ooboy.net,作者:Fdream
放着放着就忘了,多亏army同学在后面催我,要不然还真不知道什么时候会继续弄这个。今天上午又抽空捣鼓了一下,偏移总算是弄出来了,不过渲染效率很低,中间的计算过程应该还可以继续优化的。另外,弄到这里发现还是有问题,分得较细的时候会出现裂缝……误差真可怕!
先不管这个误差,我们来看看能不能形变先。由于计算形变矩阵需要初始的坐标和新的坐标,需要两个方法来计算(貌似可以合并?):
// calculate points
// 包含x坐标和y坐标,分别存储在pxs和pys数组中
// @params:
// w: 位图宽
// h: 位图高
// hs: 水平分段数
// vs: 垂直分段数
// @return:
// void
function CalculatePoints(w:Number, h:Number, hs:Number, vs:Number):void {
var iw:Number = w / hs;
var ih:Number = h / vs;
for (var h=0; h<=hs; h++) {
pxs[h] = h * iw;
}
for (var v=0; v<=vs; v++) {
pys[v] = v * ih;
}
}
Processed in 0.4843812 second(s) , unknow queries
Powered by OWord V0.1, Even Not Alpha
(此博客程序为半成品,请勿索取,以免给您的心灵造成创伤^_^)
鄂ICP备05026031号
2009-3
用户中心
日志分类

最新日志
最新评论
统计信息






友情链接