AS3加载动态命名的文本文件

时间:2016-06-26 03:34:10

标签: actionscript-3 flash

我有一个加载界面的预装电影。在界面中我有很多按钮。当我点击一个按钮时,我想将一个文本文件加载到名为" TextMovie.swf"的电影中。我希望能够单击按钮,获取按钮的名称并加载与按钮实例同名的文本文件,并使窗口显示在鼠标单击附近。将有数百个按钮和数百个文本文件。我确信这对某些人来说很容易。这是一个按钮的加载器:

button_1.addEventListener(MouseEvent.CLICK, fl_ClickToPosition_2);

function fl_ClickToPosition_2(event:MouseEvent):void 
{
var my2ndLoader:Loader = new Loader();
var url2:URLRequest = new URLRequest("TextMovie.swf");
my2ndLoader.load(url2);
addChild(my2ndLoader);
my2ndLoader.x = 200;    
my2ndLoader.y = 10;

}

然后在TextMovie.swf中我有:

import flash.net.URLLoader;
import flash.events.Event;
import flash.net.URLRequest;
import flash.text.StyleSheet;

var css:StyleSheet = new StyleSheet();
css.setStyle("a:hover", {textDecoration:"underline"});

var textLoader: URLLoader = new URLLoader();
textLoader.dataFormat = URLLoaderDataFormat.VARIABLES;

textLoader.addEventListener(Event.COMPLETE, textLoaded);

loadText();

function textLoaded(evt: Event): void {
title_txt.htmlText = textLoader.data.txtTitle;
main_txt.htmlText = textLoader.data.txtBody;
URL_txt.htmlText = textLoader.data.txtURL;
URL_txt.styleSheet = css
}

function loadText(): void {
// var fileName: String = "assets/test_01.txt";
var fileName: String = "assets/" +  +  ".txt";
textLoader.load(new URLRequest(fileName));
}

我不确定如何获取我按下的按钮的名称并将其应用于将加载正确文本文件的字符串。我也无法让窗口显示在鼠标点击附近。现在我只需要用x和y进行测试。

我知道很多,但感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我建议您查看MouseEvent的文档,以便更好地了解在触发事件时将哪些数据作为参数传递。

在事件处理程序中,引用被传递给被单击的对象:事件target - 从中​​可以获取其名称,位置等。这很好,因为这意味着您只需要一个所有按钮的事件处理程序。

获得名称后,您可以构建网址所需的字符串。 (如果它是一个具有任何生命周期的项目,我不会这样做,但这是一个不错的方法。)

您可以获取target的x和y位置,宽度和高度,并使用该数据定位窗口。 localXlocalY属性是指相对于target(按钮)的矩形的点击位置 - target == 0,0的顶部/左侧。

  

这是以下函数的跟踪输出:
  red red.swf
  600 400
  25 8.5

  button_1.addEventListener(MouseEvent.CLICK, onHandleButtonClick);
        function onHandleButtonClick(event:MouseEvent):void 
        {
            var btnName:String = event.target.name;
            var swfName:String = btnName + ".swf";

            trace(btnName, swfName);
            trace(event.target.x, event.target.y);
            trace(event.localX, event.localY);
        }