Archive for the ‘Flash ActionScript’ Category

js与flash交互

星期六, 二月 6th, 2010

在html页面里js调用swf里的方法,以及swf调用js函数。
在as中:

ExternalInterface.call("js函数名“,参数1,参数2,....);//flash调用js
ExternalInterface.addCallback("js函数名", as对应方法);//添加js对应的回调函数。

在html中:
关健是要先获取dom里的flash节点对象.假定为swfobj,
js调用方法为:swfobj.方法名(参数1,参数2);
例如:
as中:

ExternalInterface.addCallback("play", jsplay)
function jsplay(a,b,c){
//do someting
}

则js中可为:
swfobj.play(”a”,”b”,”c”);
js调用时需要对object,embed中的AllowScriptAccess做设定,默认值是: sameDomain,如果跨域的需要设为always,还要对其as中的Security.allowDomain进行设定,图方便可直接设为 Security.allowDomain(*);

补充一个比较杯具的问题:
除纯正的IE之外所有IE内核的浏览器,例如:傲游,TT,世界之窗等等,在js调用flash时会出现安全沙箱的问题。貌似是AllowScriptAccess无效了,其真正原因是因为这些外壳浏览器的缓存机制的问题。比较恶心的作法是针对IE内核的浏览器在引用swf文件时,在其URL地后增加一个随机变量。通过动态改变URL方式清除缓存。本来还以为是这些浏览器有问题,后来细想一下,还是adobe的问题。

jquery+swfobject代码:

var r=$.browser.msie?"?"+Math.random():"";
swfobject.embedSWF("main.swf"+r, "slides", "500", "260", "9.0.0","",
{}, {"AllowScriptAccess":"always"}, {"id":"flash_map","name":"flash_map"});

FLASH Loader 的 bug?

星期一, 十月 19th, 2009

手头有一个小的flash程序,一个图片的加载器。而开发阶段,Loader去加载一张2562*1602的图片,又把loader缩小到50*50的宽度.再把loader定位到stage的右下角。
好!问题来了,当是stage的长宽变大时,Loader内的图片x,y坐标会有一个限值。当图片越大,该loader内的图片的限值x,y坐标越小。

(全文…)

as闭包,addEventListener传参数.

星期四, 六月 18th, 2009

闭包,很强大。as通用闭包方法给addEventListener传参数。

var arg=0;
a.addEventListener(MouseEvent.CLICK,clickfunc(arg));
function clickfunc(arg):Function{
var func=function(e):void{
trace(arg);
trace(e);
}
return func;
}

flash cs3应用google map api

星期天, 八月 17th, 2008

google今年5月发布了google map api for flash,
但下载了google官方的SDK,只是提供了flex下的组件,并没有针对flash cs3下开发的api.

(全文…)

flash datagrid组件单元格12号中文字体设置

星期二, 六月 24th, 2008

flash datagrid组件的列表字号默认不是12号字,好像是10号字,显示中文很不好看.
以下利用继承CellRenderer类方法简单设置datagrid的字体,字号及颜色.
CellRenderer 类很好几种用法,flash帮助文档有详细说明.
(全文…)

FLash中escape()出问题

星期二, 一月 8th, 2008

利用escape () 转化中文的URL地址,但转成的结果并非是正确的结果。
查来查去,最后发现是AS3.0的escape()和AS2.0的escape()有着不同的功能。
AS3.0用escapeMultiByte ()的功用才和AS2.0一样。

Flash中ExternalInterface.call返回null值

星期一, 十二月 31st, 2007

利用ExternalInterface.call调用html里的js函数,参照了flash帮助文档里的做法.可以执行js的函数.但就是无法获取return的值.
网上一大堆教程也只是抄flash帮助文档的东西.也试了allowScriptAccess=always.结果无效,
最后让我去搜了N个flash网站,答案居然是只要给<object>加上一个id或是name就解决了.
哎…….无语了

注(IE7.0)

FLash子类继承父类的带参数的构造函数

星期一, 五月 14th, 2007

想给FLASH的Date类增加一些农历的数据.当然是继承Date再增加一些方法啦.
但在做的过程发现在以前从没有碰到过的问题.
农历的数据是从公历数据换算过来的.而Date类在实例过程中有好几中方式.
怎么样继承父类的构造函数,在flash帮助文档中"重写方法和属性"中得到结果结论:
Widget.as类文件

class Widget {
    public static var widgetCount:Number = 0;
    public function Widget() {
        Widget.widgetCount++;
    }
    public function doSomething():Void {
        trace("Widget::doSomething()");
    }
}


SubWidget.as类文件

class SubWidget extends Widget {
    public function SubWidget() {
        trace("Creating subwidget # " + Widget.widgetCount);
        doSomething();
    }
}


在新建的flash文档中


var sw1:SubWidget = new SubWidget();
var sw2:SubWidget = new SubWidget();



输出结果:


Creating subwidget # 1
Widget::doSomething()
Creating subwidget # 2
Widget::doSomething()



结论是子类继承父类,也继承了父类的构造函数.但是Date类构建函数是带参数,而且还是有多种方式.
最后,终于在flash帮助文档中找到了super条目.以前一直没有注意.以前做的东西也很少有这样父类,子类,爷类的.
super用法:


super.method([arg1, ..., argN])
super([arg1, ..., argN])



第一种语法格式可以在对象方法体内使用,用于调用方法的超类版本,而且可以选择向超类方法传递参数 (arg1 … argN)。这对于创建某些子类方法很有用,这些子类方法在向超类方法添加附加行为的同时,又调用这些超类方法执行其原始行为。

第二种语法格式可以用于构造函数体内,用以调用此构造函数的超类版本,而且可以选择向它传递参数。这对于创建子类很有用,该子类在执行附加的初始化的同时,又调用超类构造函数执行超类初始化。

我的农历date类 LunarCalendar.as,其实的参数完全和date类的参数一样.


class LunarCalendar extends Date {
 public function LunarCalendar(yearOrTimevalue:Number, month:Number, date:Number, hour:Number, minute:Number, second:Number, millisecond:Number) {
  super(yearOrTimevalue, month, date, hour, minute, second, millisecond);
 }
}