我多年来一直使用的另一种令人难以置信的简单解决方法是直接在 swf 中创建一个输出模块。所有这一切都意味着一个键盘快捷键,它附加了一个带有文本字段的 MovieClip。我的所有跟踪都转到此文本字段,而不是(或除此之外)输出窗口。多年来,我当然已经对其进行了改进,使窗口可拖动、调整大小等。但我从来不需要任何其他方法来进行简单的日志记录,而且它在所有平台上都是 100% 可靠和可重用的。
[编辑 - 对评论的回应]
没有像 javascript 的 alert() 函数那样的警报。但是使用内部文本字段就是这么简单:
动作脚本 1 版本
(见底部注释)
/* import ExternalInterface package */
import flash.external.*;
/* Create a movieclip for the alert. Set an arbitrary (but very high) number for the depth
* since we want the alert in front of everything else.
*/
var alert = this.createEmptyMovieClip("alert", 32000);
/* Create the alert textfield */
var output_txt = alert.createTextField("output_txt", 1, 0, 0, 300, 200);
output_txt.background = true;
output_txt.backgroundColor = 0xEFEFEF;
output_txt.selectable = false;
/* Set up drag behaviour */
alert.onPress = function()
{
this.startDrag();
}
alert.onMouseUp = function()
{
stopDrag();
}
/* I was using a button to text EI. You don't need to. */
testEI_btn.onPress = function()
{
output_txt.text = (ExternalInterface.available);
}
注意:这适用于 AS1,并且可以很好地转换为 AS2(如果这样做,最好使用强数据类型,但不是严格要求)。它应该在 Flash Player 8-10 中工作。 ExternalInterface 是在 Flash 8 中添加的,因此在以前的播放器版本中将无法使用。
动作脚本 3 版本
var output_txt:TextField = new TextField();
addChild(output_txt);
output_txt.text = (String(ExternalInterface.available));
如果你想加强一点:
var alert:Sprite = new Sprite();
var output_txt:TextField = new TextField();
output_txt.background = true;
output_txt.backgroundColor = 0xEFEFEF;
output_txt.selectable = false;
output_txt.width = 300;
output_txt.height = 300;
alert.addChild(output_txt);
addChild(alert);
alert.addEventListener(MouseEvent.MOUSE_DOWN, drag);
alert.addEventListener(MouseEvent.MOUSE_UP, stopdrag);
output_txt.text = (String(ExternalInterface.available));
function drag(e:MouseEvent):void
{
var alert:Sprite = e.currentTarget as Sprite;
alert.startDrag();
}
function stopdrag(e:MouseEvent):void
{
var alert:Sprite = e.currentTarget as Sprite;
alert.stopDrag();
}
[/编辑]