As3 - 如何使用代码检查SWF运行的IDE是什么?

时间:2014-07-04 19:37:48

标签: actionscript-3 flash flash-builder flash-cs5

我知道这对我想要找到的东西有点奇怪,但这里有一个关于为什么我要这样做的小故事:

我正在制作一款在线多人Flash游戏。我正在使用flash builder和flash professional来编写as3并使用图形。我也在运行一个开发服务器(在visual studio ultimate中由playerio运行)。我测试这个在线多人游戏的方式是从flash专业人员运行swf一次,从flash builder运行一次。它们都连接到完全相同的动作脚本3代码和flash影片剪辑(通过swc文件)。我喜欢这个设置很多,因为flash pro和flash builder都有自己的小输出区域,我可以分别看到每个用户的调试输出。

问题

虽然两个swf正在运行完全相同的代码,但我希望它们的行为不同。例如,flash pro版本获取对以下图像的引用:

_gameOverPopup = this["gameOverPopup"];

并且Flash构建器用户得到它:

_gameOverPopup = new GameOverPopup;

还有许多其他差异。例如,我通过硬编码用户名和密码自动进行身份验证并在每种情况下使用不同的用户登录。所以现在我的代码看起来像这样:

if (inFlashBuilder) {
     // this only happens when debugging in Flash Builder
     authenticateWith("billyboy", "Secret123");
}
else {
     // this only happens when debugging in Flash Professional
     authenticateWith("joeshmoe", "password1");
}  

这很好用,但我手动更改了代码中的 inFlashBuilder 变量。我基本上只是把它放在班级的顶端:

private var inFlashBuilder:Boolean = true;

每次编译之前我都必须手动将其从true更改为false 。哦,伙计,我希望系统中有一个方法或类似的东西,我可以用它来控制这个标志变量。如果只是......

2 个答案:

答案 0 :(得分:4)

您将需要使用编译器常量。 FlashPro实际上已经针对IDE设置了一个。您可以在AS3中按如下方式访问它(它将产生true或false):

CONFIG::FLASH_AUTHORING

所以,你想要这样做:

if (CONFIG::FLASH_AUTHORING) {
     // this only happens when debugging in Flash Professional
     authenticateWith("joeshmoe", "password1");
}
else {
     // this only happens when debugging in Flash Builder
     authenticateWith("billyboy", "Secret123");
} 

您需要在Flash构建器中设置相同的常量,但将值设置为false。 在 flex-config.xml 中,添加以下内容:

<compiler> 
    <define append="true"> 
        <name>CONFIG::FLASH_AUTHORING</name> 
        <value>false</value> 
    </define>
</compiler>

请参阅此链接以了解有关如何在Flash Builder中执行此操作的详细信息: http://help.adobe.com/en_US/flex/using/WS2db454920e96a9e51e63e3d11c0bf69084-7abd.html

答案 1 :(得分:0)

如果您不想构建它两次,您还可以使用后置构建钩子以不同的名称复制swf。然后,在您的代码中,您可以检查this.loaderInfo.loaderURL并以这种方式区分您的逻辑。

if( this.loaderInfo.loaderURL.indexOf( "second.swf" ) )
    // do alt logic