看到as3在flex b2下已经有了支持预处理的工具...eclipse的框架就是这点好~~
其实Mike Chambers 早在去年差不多这个时候就提出来了....方法还是蛮巧妙的,说bt比较适合-__-....差不多就是用c/c++编译器,把写好的as文件滤一遍....发现老外的脑子确实动的快,这也和他们对知识的整个框架熟悉有关...唉....扯远了#_#
flash本来也就支持预处理的,比如
#include
#initclip
#endinitclip 第一个,用的必较多,特别是2k4以前
后面两个嘛.MX里面常用来做组件...2k4以后就淘汰了(实际上是必用的,不过我们写的时候不太用就是了)
然后像c/c++里面,其它强大的预处理功能.就没有了
最常用的就是
#define
#ifdef
#endif ....
现在嘛,可以用这个技巧也让as支持一把,:>
首先也去找个c/c++编译器.一般就是gnu,免费的么,这里下,30M多
http://directory.fsf.org/gcc.html
接着解压好像就能用了,还是要安装我也不清楚,反正不复杂的...我机器里面是以前装了个dev-cpp所以一起帮偶搞定了
好了应该有个bin文件夹,里面有个cpp.exe,用的就是它
了解c/c++的就方便了,和我一样不懂的也没关系,只要学会上面说到的#define,#ifdef,#endif就很有用了
比如
function Test()
{
#ifdef DEBUG
trace("this is a test");
#endif
} 保存文件为 test.p (后缀名基本随意) 保存到bin下面
然后cmd下
cpp -D DEBUG -P test.p test.as
后bin下面就会生成一个test.as,自己打开看看,会发现没有了预处理命令,只保留了trace
再试试
cpp -P test.p test.as
会看到trace都没了
这样子,就不会在一些程序里面老多一步无聊的 if(_global.G_DEBUG)运算了
然后#define
#define SIZE 10
var a :Array = new Array(SIZE);
for(var i=0; i<SIZE; ++i)
a[i] = i; 还是老样子
cpp -P test.p test.as
会发现SIZE的地方都被10代替了..其实#define就是命令行里面的-D
如果你觉得命令行里面输入烦
就可以在之前的文件里面 #define DEBUG ,这样就可以在命令行里去掉-D DEBUG,而又程序文件来控制是否定义DEBUG
-P是告诉cpp不要在生成文件内插入行符.
还要说明,如果用cpp滤一下的话,所有注释都没了,要保留注释,需要加一个 -C
这里提到的参数都是大小写敏感的,也就是说都要大写
最后提一下,flash本身支持的3个预处理#include..巧了.cpp里面也是有的,而且作用和flash差不多,所以flash里面如果有#include的话..cpp后的生成文件会把#include的文件编译好后一起放入生成文件内
而另外两个c/c++里面没有,所以如果程序文件里面有的话,cpp会报错,不过我想现在估计不太可能再有人用了
看一下下面的范例程序,里面定义的Max实在是比较搓....如果在class里面不定义成dymanic的还会报错...这里只想说一下这么定义也是可以的=_=
#define SIZE 10
#define Max(x,y) ((x)>=(y)?(x):(y))
//--- Main ----
var a: Array = CreateArray();
#ifdef DEBUG
trace(a);
#endif
Bubble(a);
#ifdef DEBUG
trace(a);
#endif
//-------------
function Bubble(a: Array): Void
{
for(var i=0; i<a.length-1; ++i)
{
for(var j=i; j<a.length; ++j)
{
if(Max(a[i],a[j]) == a[j]) // a[j] > a[i]
{
var tmp = a[j];
a[j] = a[i];
a[i] = tmp;
}
}
}
}
function CreateArray(): Array
{
var arr: Array = new Array();
for(var i=0; i<SIZE; ++i)
{
arr[i] = random(SIZE);
}
return arr;
}
cpp -P -C test.p test.as 嗯.记得ox以前抱怨起flash没有预处理,现在好了,虽然不能说就可以像c/c++那样了.不过至少还是有很不错的表现.但估计他早去玩c++了~~~
另外如果对预处理或者cpp想了解更多的看这里
http://gcc.gnu.org/onlinedocs/cpp/
不知道这东西是不是古老了...搞不好我又做了次火星人...唉..想想人家老外一年前就提出来了,又想起来,前两天才刚知道flash里面如何支持浏览器的back button这是人家2001年就提出来的啊...真是郁闷要死
好了,无聊,睡觉去了