对mtasc的测试:
2.1对v2component 不支持.
2.2对跨了两个文件夹域的类好像得不到~~~
2.3对内部类的成员对象的测试情况一点也不好,看来这个还是只适用于测试之用。
2.4
不需要再针对嵌套函数使用thisP(private static var thisP:Object)指针了,但也支持的.好像只能在setInterval里使用.
可以直接访问到
class B
{
public function B()
{
var p:Number=1;
_root.onEnterFrame=function():Void
{
p++;
_root.txtA.text=p;
}
}
}
txt文本框里跳动着我们想要的累加的数字。
这其实并不合理,局部变量竟然可以访问,但权且这样凑合着用哈~~~
2.5
txt1.text=clearInterval(thisP.ID); //这个被认为是error
clearInterval(thisP.ID);//OK.
2.6尽管setInterval及_root.onEnterFrame把当前的作用域给改变了,但用thisP+privateMvalue依旧可以访问到类中的
私有类型成员.
2.7好像不太支持函数对象的样子的说.只支持传统的匿名函数.
3Interval是否可以删除自己?答,可以。
class SetInterTest
{
public var p:Number;
static private var thisP:Object;
private var ID:Number=0;
public function main():Void
{ thisP=this;
this.p=1;
for(var i=0;i<11;i++)
{
_root.createTextField("txt"+i,i,0,(i-1)*25,500,25);
}
ID=setInterval(testF,1000);
}
public function testF():Void
{
thisP.p++;
_root.txt3.text=thisP.p;
if(thisP.p>10)
clearInterval(thisP.ID);
}
}
//最后的output停在了11处。
但是_root.onEnterFrame中用
delete _root.onEnterFrame就出错了,而Flash中是可以的.
2.8对于类内部成员对象,直接初始化无效。
如private var t:Number=1;//Wrong!!!
2.9
static private var thisP:Object;
static private var Num:Number;
在setInterval中用thisP.Num将失效.
3内部类成员对象的使用:OK
class Test
{
public function Test()
{
main();
}
private function main():Void
{
var a=new Invoke();
a.main();
}
}
class Invoke
{
private var mP:P;
public function main():Void
{
for(var i=0;i<11;i++)
{
_root.createTextField("txt"+i,i,0,(i-1)*25,500,25);
}
mP=new P();
mP.show();
}
}
class P
{
public function show():Void
{
_root.txt1.text="HelloWorld!";
}
}
//测试结果:成功!
4import
4.1 *号不支持.
import Archive.*;
Test.as:1: characters 0-6 : type error import .* is not currently supported
4.2保持包的完整性,做完全面向对象的开发:
不要麻烦了,经测试,把类定义在子路径(1级-2级)里都没问题,
因为我们使用的是
mtasc Test.as -swf subC.swf
让Test.as去找好了.
所以,用mtasc做dev的思考方式可以和Flash中保持一致了.
flash
swf
CMain.as
+----
myPackage
+----
SubPackage1
myC1.as
myC2.as
SubPackage2
myC3.as
myC4.as
Flash中:#include "Script.as"
Script.as中:
....//其它代码,如fscommad("allowscale",false);
new CMain();//经测试,这种模式可行的.
CMain中:
import myPackage.SubPackage1.myC1;
import myPackage.SubPackage2.myC3;
...
class CMain
{
public function CMain()
{
main();
}
private function main():Void
{
/*Your Real Code ,like
var myIns:myC1=new myC1();
myIns.method();
...
funDesignPatterns(argu1,...);
...
*/
}
}
这样的做法并非多此一举,层层下放之后,代码的开发模式变得相对固定的多了,
Hoho,心潮澎湃啊,Devloping!!!
5
不支持try...catch...throw ,郁闷~~~难道真的只能降格为测试用的了?
6
不支持typeof
7
不支持TextField.StyleSheet
8
不支持getNextHighestDepth();
由于MTASC并不能特别好的支持一些AS2中的有的方法及对象,它唯一的优点是速度狂快,
所以目前认为它只在测试阶段有些用,真正做东东的,还得用FLASH的编译器。
下面这个飞机游戏的测试就是在完全的mtasc环境下做的,代码仅供参考,只想对MTASC中的AS代码做个范例,我不对此提供任何技术支持.
点击浏览该文件
mtasc 用起来很不习惯啊,但是我觉得它比FlashMXpro2004有前途。
EmilMatthew是用Eclipse的IDE么,还是...不是notpad吧?要是Eclipse,请麻烦帮帮忙。
我怎么在IDE环境下配置才能直接调试啊?现在还要敲完代码,自己找.swf然后在命令行窗口...累死。
2.1“不支持V2组件”。
我好像看到有人说,是因为没有包含相应的剪辑在.swf文件,用FlashMXpro2004发布的时候,要是包含了一个就可以使用里边的类了。不过自己试也没成功,那些组件的类的代码被mtasc删掉了。
2.4“局部变量竟然可以访问”你没有说访问什么啊。这是可以访问什么呢。
对这个,各人习惯啦。有人就觉得非常合理,觉得:
.......
public function B()
{
var p:Number=1;
_root.onEnterFrame=function():Void
{
p++;
_root.txtA.text=p;
}
}
等价于
.......
public function B()
{
var p:Number=1;
_root.p = p; //加这么一句,逻辑就清楚了
_root.onEnterFrame=function():Void
{
p++;
txtA.text=p;//这个_root.没有必要写的
}
}
而且充分体现了,动态语言的优势,甚至你可以用for定义一大批函数。
麻烦反汇编看看代码是不是想我想的一样运行的好不好?
对了,关于mtasc加一条:不支持with。