我知道这对我来说是一件很奇怪的事情,我想找到,但这里有一些关于我为什么要这样做的背景故事:
我正在制作一个在线多人 Flash 游戏。我正在使用 Flash Builder 和 Flash Professional 来编写 as3 和处理图形。我也在运行一个开发服务器(由 Visual Studio Ultimate 中的 playerio 提供)。我测试这个在线多人游戏的方式是从 Flash Professional 和 Flash Builder 运行一次 swf。它们都连接到完全相同的 ActionScript 3 代码和 Flash 影片剪辑(通过 swc 文件)。我很喜欢这个设置,因为 flash pro 和 flash builder 都有自己的小输出区域,我可以分别看到每个用户的调试输出。
问题
尽管这两个 swf 运行的是完全相同的代码,但我希望它们的行为有所不同。例如,flash pro 版本从以下位置获取对图像的引用:
_gameOverPopup = this["gameOverPopup"];
Flash Builder 用户是这样理解的:
_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 变量。我基本上只是把它放在类(class)的顶端:
private var inFlashBuilder:Boolean = true;
和 每次编译 之前,我都必须手动将其从 true 更改为 false 。哦,伙计,我希望 System 中有一种方法或类似的方法可以用来控制这个标志变量。要是...
最佳答案
您将需要使用编译器常量。 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
关于actionscript-3 - As3 - 如何使用代码检查 SWF 是从哪个 IDE 运行的?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24580041/