Sipo Blog

宁静致远

FLASH CS3/CS4 使用外部AS文件的Hello World

1,建立一个FLA

2,建立一个AS

3,内容如下

package {
  
  import flash.display.*;

  public class Main extends MovieClip  {

    // Constants:
    // Public Properties:
    // Private Properties:

    // Initialization:
    public function Main() {

      trace("hola");

    }

    // Public Methods:
    // Protected Methods:
  }

}


4,在FLA的属性里面的Document Class里面写上 Main

5,就这样,你就可以不在时间线上写AS了。

Flash CS3里面用ActionScript3做令人崩溃的场景跳转

不知是技术太烂还是flash cs3的bug。
新建一个文件
第一帧做“gotoAndPlay(1,"场景 2")”
就能跳转过去
可是用我自己有多层多帧的文件
也在第一帧做“gotoAndPlay(1,"场景 2")”
就死活不跳转
必须在
第二帧做
“gotoAndPlay(1,"场景 2")”
奶的,不知道为什么!
而且你好死不活的把AS2的gotoAndPlay的两个参数颠倒了位置!
原来应该是gotoAndPlay("场景 2",1)”
现在倒过来.
而且Flash CS3做AS2的fla有gotoAndPlay的参数提示,而AS3的没有提示。
大概是要从MovieClip类继承才有提示吧
但是楞从MovieClip类调用gotoAndPlay还说什么static错误
一会儿又没有定义什么的
真他妈的麻烦。

友情广告:成都RIA交流

yx.shawn (blog.ezse.com) , 最近想组织一下成都搞RIA的朋友们出来耍下,因为现在搞RIA都是散兵涣马的, 希望借此机会能整合一下大家的兴趣爱好,建立这样个圈子起来.目前活动情况希望得到成都的朋友们支持和意见建议.

http://blog.ezse.com/?page_id=695
详细讨论群:
Douban: http://www.douban.com/event/10035719/
QQ群: 6203101

以上是广告,源于肖的一封邮件,开始我以为他发错了?让我去成都耍?我想我不是在北京么?后来定睛一看是说让我帮他转发一下。。。哦。。。酱紫。。于是就转发鸟。。8过前天PR降到了3,应该没什么用了吧。。。呵呵~~不过是算是肖告诉我还有flex这么个东西,所以我才慢慢开始摸索actionscript的,现在感觉as真的很有趣呀

Sipo WordPress Music Player Plugin v1.1b MP3音乐播放器超小插件

前言

帮客户安装WordPress,欲找一个MP3播放插件,用了几个不满意,所以花了半个晚上用AS写了一个超轻量的插件。正好想学学AS怎么操作音乐。也顺便了解一下WordPress的插件制作过程。因为太简单,如有雷同纯属巧合~

安装

上传sipomusic文件夹到/wp-content/plugins/

别忘记在后台启用

使用

想了半天前缀用什么,本来想用music,怕有重名。但后来还是用这个了。

[music::true::http://xxx.mp3]

true表示自动播放,你还可以把true替换为(yes|auto|是|自动|播放|play|true)都可以实现自动播放,随便写点别的比如false,no,asdf什么的就是不自动播放. 

下载:

sipomusic.zip

更新 

1)1.1版本增加了对于无效的URL的错误处理

2)1.1版本增加了下载进度条显示功能。

告诉你到底什么是crossdomain.xml

http://www.crossdomainxml.org/
别的废话不多说了,上面的网址很全。
为还存在疑惑“怎么不起作用呀”的网友补充几句话。
首先,crossdomain.xml是放在服务器端的文件,什么叫做放在服务器端,就是放在你要获取的文件的所在的那台机器的那个域名下面。比如我自己的网站是xxx.me.com,我的网站上有一个swf要获取xxx.you.com上的文件,那么crossdomain.xml要放在xxx.you.com上才可以。crossdomain.xml里面的内容就是

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
   <allow-access-from domain="*.me.com" />
</cross-domain-policy>

明白了吧。

解析indexToItemRenderer为什么有时候取到null

好啦,一句话,这是一个BUG?
也可以说不是。也可以说是。
有的人认为是,有道理。有的认为不是也有道理。慢慢听我说。
如果list很长,需要scroll的时候,flex仅仅缓存可见部分,也就是说在debug的时候我们可以看到renderArray只有scroll显示的部分。也就是说,flex可能为了某种效率需要(我猜的),因此把其他的行不缓存?或者不放在可以支配的itemrenderer里面.
我想这是好的,以后希望他能提供另外一个方法,让我们可以支配那些list很长,或者grid中的数据很长的不可见部分。
我想,这还是算是一个bug毕竟你没有提供如何支配不可见行部分的数据的方法!
http://www.actionscripts.org/forums/showthread.php3?p=647717

原来要用indexToItemRenderer实现对ItemRenderer中内容的修改!

狂晕!
我被Flex搞得狂晕,被ActionScript折腾了1个小时。就是找不到方法!我说不可能呀!
开始我从DataGridColumn入手,毕竟我的ItemRenderer是DataGridColumn的一个属性,但是这家伙的itemRenderer属性是奶奶的一个IFactory接口,这玩意咋弄类。要命了。我于是试呀,搜呀。一个小时过去了,debug了无数次。几乎绝望了。在最后的关头,我看了一下DataGridColumn的owner==>伟大的DataGrid~我就看他有没有什么方法看着就觉得是的!看呀看呀,突然灵光一现,突然看到了indexToItemRenderer这个方法,绝对是突然看到的,我的第6感告诉我,这就是Mr Right!于是Google了一下,果然不出所料,很像。然后突然蹦出一个网页就是这根救命稻草了!看!
http://tech.groups.yahoo.com/group/flexcoders/messages/94076?threaded=1&m=e&var=1&tidx=1
答案就在这个页面的1/3的位置!
哈哈

LIST_ID.indexToItemRenderer(NUMBER_OF_INDEX).document.ID_FROM_MY_TEXTBOX.text

真复杂呀!
我知道有一个document是肯定的,因为我在ItemRenderer里面需要调用this.parentDocument才能访问到外面的主程序的函数,但是我不知道是谁的document。现在知道了!太伟大了。GG真神奇。
有一点疑惑的是,为什么indexToItemRenderer是一个一维的数组呢?我怎么觉得应该是2维呀,但是2维我测试过不对哦。所以说NUMBER_OF_INDEX是行坐标。那么,怎么确定列呢?难道是LIST_ID?不可能吧?DataGridColumn没有indexToItemRenderer方法呀,我迷惑了,超级迷惑。不过好在我就用了1列,能用就成了!呜呼哀哉~~
顺便说一句网上有个杜XX的网站,排名还挺高,都是转载的抄E文的,狂晕,本来还想请教他,后来发现都是抄的转载的,想想还是算鸟。也不知道是不是蓝色的。晕死。

用ActionScript3实现了Flex与Javascript之间的双向通信调用

这个超简单的。因为太简单不好意思写。还是写吧。。。。
首先呢,在HTML模板里面添加一个JS函数:${application}实际上就是object那个flex的id,只不过呢,flex的模板文件里面用这个字符代替了。恩。你换成id也一样。

function sendToActionScript(value) {
        alert(value+"http://www.dc9.cn");
         document.getElementById("${application}").sendToActionScript(value);
     }

然后类,在flex里面添加一个启动注册钩子函数:这个在application initial的时候执行,前面的参数是js的函数名,后面参数是flex的函数名。

ExternalInterface.addCallback("sendToActionScript", receivedFromJavaScript);

然后类,在flex里面加入这个函数

private function receivedFromJavaScript(value:String):void {
    mx.controls.Alert.show("JavaScript says: " + value + "\n");
}

然后类,你随便找个什么玩意儿触发一下就可以啦:

<mx:Label click="ExternalInterface.call('sendToActionScript', 'http://www.dc9.cn');" text="http://www.dc9.cn" buttonMode="true" color="#CCCCCC"/>


就这样咯。刷牙去。我觉得flex从人性化程度上和易用性角度来看还是比silverlight好,唯一的缺点就是功能相同条件下size有点大.
另外,flex比sl的blend2设计人性很多!我用blend觉得怎么这么别扭呀!而且好多东西要自己下,最开始什么都没有。我晕。你集成一些usercontrol不就完了,我知道哪找去呀!还是flex好些。好用多了。
但是,我想实现的功能用mxml project实现比用as project更方便,可是mxml编译出来的体积很大.
我表达清楚了么有呀?
真乱。。
。。。
有几个问题没有弄明白。vbox,hbox,hdividebox,vdividebox,canvas都在什么场合用呀?
我乱用就乱了。。。
不知道有没有这方面的教学资料。
我现在全部用grid代替了。
看看人家vs2008就是做的好,我是指UI设计方面,人性化多了。这点比flex强多了。
说句公平话sl的发展不容小视。不过有一点sl的重大缺点我很不满意的就是,sl与ie结合太紧密,downloader下载个什么都在ie状态栏显示,还不能屏蔽。显示个鸟啊,显示不用你类~~

ActionScript Project的swf果然比Flex Project小一半儿

记得当年参加嵌入式竞赛的时候肖轶翔Yx.Shawn说as的project能比flex小很多。我今天下载了一个AsWingA3编译了一下,在ActionScript Project里面加入了一个JButton:

package
{
  import flash.display.Sprite;
  import org.aswing.JButton;
  public class t2 extends Sprite
  {
    private var button:JButton;
    public function t2()
    {
      super(); 
        button = new JButton;
        button.setLocationXY(0,0);
        button.setSizeWH(666,888);
          addChild(button);

    }

  }
}

然后用在Flex Project里面也做了一个Button

version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" viewSourceURL="srcview/index.html">
  <mx:Button x="0" y="0" label="Button" width="732" height="380"/>
  
</mx:Application>

然后分别输出Release Build
前一个87KB(也tm挺大的)
后一个147KB
果然aS弄出来的很小啊,半年之后我才验证了他的话。啊,伟大。还能不能再小呢?我就一个Button啊!

于是我发现真的还能再小。。。。。用最原始的SimpleButton就可以了-_____-||||

package {
    import flash.display.Sprite;

    public class Test4 extends Sprite {
        public function Test4() {
            var button:CustomSimpleButton = new CustomSimpleButton();
            addChild(button);
        }
    }
}

import flash.display.DisplayObject;
import flash.display.Shape;
import flash.display.SimpleButton;

class CustomSimpleButton extends SimpleButton {
    private var upColor:uint   = 0xFFCC00;
    private var overColor:uint = 0xCCFF00;
    private var downColor:uint = 0x00CCFF;
    private var size:uint      = 80;

    public function CustomSimpleButton() {
        downState      = new ButtonDisplayState(downColor, size);
        overState      = new ButtonDisplayState(overColor, size);
        upState        = new ButtonDisplayState(upColor, size);
        hitTestState   = new ButtonDisplayState(upColor, size * 2);
        hitTestState.x = -(size / 4);
        hitTestState.y = hitTestState.x;
        useHandCursor  = true;
    }
}

class ButtonDisplayState extends Shape {
    private var bgColor:uint;
    private var size:uint;

    public function ButtonDisplayState(bgColor:uint, size:uint) {
        this.bgColor = bgColor;
        this.size    = size;
        draw();
    }

    private function draw():void {
        graphics.beginFill(bgColor);
        graphics.drawRect(0, 0, size, size);
        graphics.endFill();
    }
}


这玩意realease出来只有1KB
已经最小了。我喜欢。
不知道AsWingA3为啥搞这么大呢???
不知道osFlash.org有没有一些占用空间更小的控件???
准备去蓝色问问。。。
我要小小小小小...................

Flash/Flex/Apollo/JavaFX/GoogleGears/SiverLight/WPF

某年某月某日,Macromedia因Flash而出名。(根据harry所言,特更改为这种表述。)
Flash使用swf文件作为RIA的基础,需要让IE/Firefox等浏览器安装ActiveX/Plugin才能运行,原则上来说FLASH是一种不开放的格式,这种不开放的格式是通过一个叫做Macromedia FlASH X.0的IDE编译得到的。后来有人破译了FLASH编译模式,那是另外一码事了。后来,有人发明了加密SWF格式的种种方法。于是对于SWF的编译与反编译一度成为热点。
某年某月某日,Adobe公司收购了Macromedia,收购之后,Flex开始出名。(根据harry所言,特更改为这种表述)
这个本质还是SWF.随着FLASH破译模式技术的提高,网络上出现了开源的AS编译器,现在已经到了AS3了,名字就不提了。
http://www.dc9.cn
后来出现了Apollo,SiverLight,JavaFX..
Apollo实际上是一个噱头,实际上是AdobeAIR,是一个桌面RIA的Framework,说它是Framework就是说,它实际上有点像.net Framework,还不明白的就理解为Adobe开发的.netframework3.0就行了,你要在这玩意儿的上面写程序才成,但是这玩意儿写出来的东西适用于桌面。就是这样了。所以这个名词放在这里有点不合适,但是,他又与flex有着千丝万缕的联系,比如支持AS什么的,这玩艺儿我没用过。
WPF这个东西更复杂了,简单来说他是.netframework3.5的一部分,当然也可以独立出来。就也把它看作一个类库就成了,一个表现层的框架。主要提供图形媒体方面的。这个名词放在这也有点不合适。
现在回归正点,说说Siverlight,这是一种名副其实的与FLASH(FLEX)并列的WEB-RIA技术。好像他包含了WPF的一部分,又包含了.netframework3的一部分,为什么只包含一部分呢?因为WEB上面,用不了那么多吧。这是我个人的理解。我不知道为什么silverlight的安装程序那么小,只有1兆多。1.1只有4兆多,我真的不知道为什么这么小。而.netframework那么大。莫非精简到web上就只剩下这么点儿了么?呵呵也许吧。不过我不看好这个silverlight毕竟他没有提供ActiveX模式,用户安装起来太麻烦了,竟然还需要exe。当然了,为了跨浏览器,用exe效果更好,但是不考虑用户体验阿,网吧怎么办呢?对吧。而且,这玩意儿,不知道支不支持商业模式(dll模式)也就是编译模式。我看网络上有人说支持,我没有弄出来过,似乎需要Oscar才能编译出dll。我用vs编译出来的silverlight全都是基于XAML开源的,这样的话不利于商业应用。
根据Allan所言,silverlight1.1支持dll模式。
http://www.dc9.cn
说说奇怪的javafx吧,sun也似乎貌似想涉及RIA领域,但是运行JAVAfx竟然要我安装NetBeans的IDE,装这个不是太麻烦了吗。于是我没有装。这个玩意是否支持编译模式我不知道。貌似不支持。
最后来说说有意思的GoogleGears,一出来竟然获得了什么2007年创新第一名的称号。真得很不可思议。仔细一看,也不支持编译模式。而且这个东西也是像SilverLight一样需要EXE安装的。也不算大。问题是,这个东西是基于js扩展的,实在不理解为什么要做成这样的,话说siverlight也可以做成全js+xaml。gears全部都是开源的,我觉得商业价值也不是很大的说。
怎么看来看去还是flex牛比呢?
不过这玩意儿就是仁者见仁,我说编译模式好,你可能说这玩意儿不利于SEO.我说SEO有个屁好,你说有益于SEO就是好。无休止的争论也没什么意义。反正我就是看好Flex,因为支持编译模式并且安装简单,只需要ActiveX.
如果SilverLight也支持编译模式,我义无反顾支持SilverLight,因为我更喜欢这种.net编程方式。
«12»

Powered By Z-Blog 1.8 Walle Build 100427
Copyright Sipo.