开发者

Actionscript 3.0 Combining Functions to make one generic function that can be applied to multiple images

I have these images that will load when I input a certain string of text but I don't know how to combine functions to make a generic one that will work for all of the images. These are just two and they're basically the same thing except I have to make each function (something)1 and then (something)2 for the next image. I need some help on doing this.

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 URLRequ开发者_StackOverflow社区est("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
     }


Got bored. Here ya go. However this should really be in a class....

//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");


I haven't tested this , but you should get the general idea. If you follow the same principles, you may even be able to optimize that even further ;)
ALso, don't forget to remove the event listeners when you're done with them!

 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)
 }
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜