Actionscript 3.0组合函数可以创建一个可应用于多个图像的通用函数

时间:2010-11-11 05:38:08

标签: actionscript-3 function generics

我输入一些文本字符串时会加载这些图像,但我不知道如何组合函数来制作适用于所有图像的通用图像。 这些只是两个,它们基本上是相同的东西,除了我必须为下一个图像制作每个功能(某物)1然后(某物)2。 我需要一些帮助。

function onInput(event:TextEvent):void {
if(ti.text.search('a')!=-1) addChild(ottefct);
else if(ti.text.search('b')!=-1) addChild(rnd);

var oeffect:Loader = new Loader();
oeffect.load(new URLRequest("http://i54.tinypic.com/anom5d.png"));
oeffect.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadingComplete);
var ottefct:Sprite = new Sprite();
 function onLoadingComplete(event:Event):void
 {
    ottefct.addChild( event.currentTarget.loader.content );
    ottefct.addEventListener(MouseEvent.MOUSE_DOWN, drag);
    ottefct.addEventListener(MouseEvent.MOUSE_UP, drop);
    ottefct.doubleClickEnabled = true;
    ottefct.addEventListener(MouseEvent.MOUSE_WHEEL, rotate)
    ottefct.addEventListener(MouseEvent.DOUBLE_CLICK, unrotate)
    ottefct.height=180
    ottefct.width=124
 }
 function drag(event:MouseEvent):void{
     ottefct.startDrag()
  }
 function drop(event:MouseEvent):void{
     ottefct.stopDrag()
 }
 function rotate(event:MouseEvent):void{
     ottefct.rotation = 90
     }
 function unrotate(event:MouseEvent):void{
     ottefct.rotation = 0
     }
//---------------------------

var rednova:Loader = new Loader();
rednova.load(new URLRequest("http://i53.tinypic.com/2dv7dao.png"));
rednova.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadingComplete1);
var rnd:Sprite = new Sprite();
 function onLoadingComplete1(event:Event):void
 {
    rnd.addChild( event.currentTarget.loader.content );
    rnd.addEventListener(MouseEvent.MOUSE_DOWN, drag1);
    rnd.addEventListener(MouseEvent.MOUSE_UP, drop1);
    ottefct.addEventListener(MouseEvent.MOUSE_WHEEL, rotate1)
    ottefct.addEventListener(MouseEvent.DOUBLE_CLICK, unrotate1)
    rnd.height=180
    rnd.width=124
 }
 function drag1(event:MouseEvent):void{
     rnd.startDrag()
  }
 function drop1(event:MouseEvent):void{
     rnd.stopDrag()
 }
 function rotate1(event:MouseEvent):void{
     rnd.rotation = 90
     }
 function unrotate1(event:MouseEvent):void{
     rnd.rotation = 0
     }

2 个答案:

答案 0 :(得分:2)

无聊。你去吧。不过这应该属于一个阶级......

//Dictionary to store images (can use Array)
var loaded_images:Dictionary = new Dictionary();

function load_image(url:String, id_name:String)
{
    var loader:Loader = new Loader();
    loader.name = id_name;
    var url_req:URLRequest = new URLRequest(url);
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadingComplete);
    loader.load(url_req);
}

function onLoadingComplete(evt:Event):void
{
    var img_name:String = evt.currentTarget.loader.name
    var spr_box:Sprite = new Sprite();
    spr_box.addChild(evt.currentTarget.loader);

    spr_box.mouseChildren = false;
    spr_box.doubleClickEnabled = true;

    spr_box.addEventListener(MouseEvent.MOUSE_DOWN, drag);
    spr_box.addEventListener(MouseEvent.MOUSE_UP, drop);
    spr_box.addEventListener(MouseEvent.MOUSE_WHEEL, rotate);
    spr_box.addEventListener(MouseEvent.DOUBLE_CLICK , unrotate);

    //Shouldn't really hard code this here
    spr_box.width = 180;
    spr_box.height = 124;

    // - Since this isn't a class, I'd do this instead:
    //spr_box.addEventListener(Event.ADDED_TO_STAGE, resize_img);

    this.addChild(spr_box);
    loaded_images[img_name] = spr_box;
}

//Because this event function lets you control individual image dimensions
/*
function resize_img(evt:Event):void
{
    switch (evt.currentTarget.name)
    {
        case "ImageOne":
            evt.currentTarget.width = 250;
            evt.currentTarget.height = 250;
            break;
        default:
            evt.currentTarget.width = 180;
            evt.currentTarget.height = 124;
            break;
    }
}
*/

function drag(evt:MouseEvent):void
{
    evt.currentTarget.startDrag()
}

function drop(evt:MouseEvent):void
{
    evt.currentTarget.stopDrag()
}

function rotate(evt:MouseEvent):void
{
    evt.currentTarget.rotation = 90
}

function unrotate(evt:MouseEvent):void
{
    evt.currentTarget.rotation = 0
}

//Few examples of use...
load_image("http://www.google.co.nz/images/nav_logo26.png", "ImageOne");
load_image("http://l.yimg.com/ao/i/nzunihead/logo-yahooxtra_1_4.png", "RandomName");

答案 1 :(得分:0)

我没有测试过这个,但你应该得到一般的想法。如果你遵循相同的原则,你甚至可以进一步优化它;)
另外,不要忘记在完成后删除事件监听器!

 function loadImage(url:String):void
 {
     var loader:Loader = new Loader();

     //use the name property to identify your Loader instance
     loader.name = url;

     //add the event listener before calling load()!
     loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadingComplete);
     loader.load(new URLRequest(url));
 }

 function onLoadingComplete(event:Event):void
 {
      switch(event.currentTarget.loader.name )
      {
          //depending on the url add to the relevant Sprite instance
          case "add the url here":
            ottefct.addChild( event.currentTarget.loader.content );
            addListeners(ottefct);
            break;

          case "add the url here":
            rnd.addChild( event.currentTarget.loader.content );
            addListeners(rnd);
            break;
      }
 }

 function addListeners(sp:Sprite):void
 {

    sp.addEventListener(MouseEvent.MOUSE_DOWN, drag);
    sp.addEventListener(MouseEvent.MOUSE_UP, drop);
    sp.doubleClickEnabled = true;
    sp.addEventListener(MouseEvent.MOUSE_WHEEL, rotate)
    sp.addEventListener(MouseEvent.DOUBLE_CLICK, unrotate)
 }