Во-первых, вот как выглядит прямой перевод:
function goGetUrl(dir:String)
{
//getURL becomes navigateToURL
navigateToURL(new URLRequest(dir), "_blank");
}
function createImage(str:String,movieName:String,nombreIma:String,index:Number,dir:String, buttonName:String)
{
//replace createEmptyMovieClip with a new movieclip.
//addChild automatically adds to the highest available depth
this[moviename] = MYMOVIECLIP.addChild(new MovieClip()) as MovieClip;
//movieclip no longer has a load method, so use a Loader instead
this[nombreIma] = MovieClip(this[moviename]).addChild(new Loader()) as Loader;
Loader(this[nombreIma]).load(str);
//properties no longer start with an underscore
Loader(this[nombreIma]).y = (index * 160);
Loader(this[nombreIma]).x = 10;
//using an anonymous function here feels dirty
MovieClip(this[moviename]).addEventListener(MouseEvent.CLICK,function() { goGetUrl(dir) });
//AS2 identifiers are replaced by class names
this[buttonName] = addChild(new MYCUSTOMBUTTONONLIBRARY()) as MYCUSTOMBUTTONONLIBRARY;
this[buttonName].x = 300;
this[buttonName].y = this[nombreIma].y + 60;
MYCUSTOMBUTTONONLIBRARY(this[buttonName]).addEventListener(MouseEvent.CLICK,function() { goGetUrl(dir) });
}
Это довольно неприятно в терминах AS3.Требуется много приведений, и обработчики кликов являются анонимными функциями, которые выполняются так же медленно, как и обработчик событий.Я бы лично создал собственный класс, который вы можете создавать несколько раз, и сохранял бы ссылки в векторе для легкого доступа.Примерно так:
package {
import flash.display.Sprite;
import flash.display.Loader;
import CustomLibraryButton;
import flash.net.URLRequest;
import flash.net.navigateToURL;
public class CustomImageDisplay extends Sprite
{
private var loader:Loader
private var button:CustomLibraryButton;
private var link:String;
public var index:int;
public function CustomImageDisplay($index:int,$img:String,$link:String):void
{
_index = $index;
link = $link;
init($img);
}
private function init($img:String):void
{
//init image loader
loader = addChild(new Loader()) as Loader;
loader.load($img);
loader.x = 10;
loader.y = _index * 160;
//init button from library
button = addChild(new CustomLibraryButton()) as CustomLibraryButton;
button.x = 300;
button.y = loader.y + 60;
//add a listener to the whole thing
this.addEventListener(MouseEvent.CLICK, handleClickEvent);
}
private function handleClickEvent(evt:MouseEvent):void
{
navigateToURL(new URLRequest(link), "_blank");
}
}
}
Вы можете использовать это так:
var imageButtons:Vector.<CustomDisplayImage> = new Vector.<CustomDisplayImage>(Proyecto.length);
for (i=0; i < Proyecto.length; i++) {
imageButtons[i] = this.addChild(new CustomImageDisplay(i,imagePro,myurl)) as CustomDisplayImage;
}
Самое классное здесь то, что событие мыши в классе будет пузыриться, так что если вы хотите знать, какиеКомпонент image был выбран из вашего основного кода, вы добавили бы слушателя на сцену и проверили объект события следующим образом:
this.stage.addEventListener(MouseEvent.CLICK,handleMouseClick);
function handleMouseClick(evt:MouseEvent):void
{
if(evt.currentTarget is CustomDisplayImage) {
trace("The image button index is: " + CustomDisplayImage(evt.currentTarget).index);
}
}