Лучший способ присоединения растровых изображений из библиотеки с помощью linkagename (в настоящее время пытается использовать - getDefinitionByName (tempName) как Class) - PullRequest
0 голосов
/ 02 апреля 2011

У меня в основном 5 изображений в библиотеке, которые я назвал следующим образом:

head_image0, head_image1, head_image2 и т. Д ...

На сцене у меня есть два контейнера, в которые я буду загружать свои изображения. - pictureContainer1_mc - pictureContainer2_mc

Pr по умолчанию Я уже загрузил изображение в container1.

То, что произойдет, это то, что, когда я нажму кнопку меню 2, head_image2 загрузится в container2 и исчезнет с альфа 0 -> альфа 1 - давая переход между двумя изображениями.

После того, как изображение расположено в контейнере 2, я запускаю функцию, чтобы поменять контейнеры, чтобы в контейнере 1 сохранялось загруженное изображение и контейнер 2 был готов загрузить другое изображение при нажатии кнопки меню.

Это выглядит следующим образом:

    //Function receiving an ID from the button click, which we can use to load the connected image
function headerFadeIn(receivedNumber:Number):void
{
    //Getting container2 rdy to tween from 0 -> 1
    pictureContainer2_mc.alpha = 0;

    //Preparing image string - linkagename
    var tempName:String = "header_image" + receivedNumber;

    //Loading the image into container 1
    var headImage:Bitmap = new Bitmap();
    var classDefinition:Class = getDefinitionByName(tempName) as Class;
    var img:BitmapData = new classDefinition(1,1);
    headImage.bitmapData = img;
    pictureContainer2_mc.addChild(headImage);

    //Tweening currecntly added image from 0 -> 1
    //When tween is done call function onFinishTween to swap containers  
    TweenLite.to(pictureContainer2_mc,1,{alpha:1, ease:menuEasing, onComplete:onFinishTween});

    function onFinishTween():void
    {
        //Setting currently loaded image in container 1         
        var headImage:Bitmap = new Bitmap();
        var classDefinition:Class = getDefinitionByName(tempName) as Class;
        var img:BitmapData = new classDefinition(1,1);
        headImage.bitmapData = img;
        pictureContainer1_mc.addChild(headImage);

        pictureContainer2_mc.alpha = 0;
    }
}

Это работает для меня. ОДНАКО я испытываю некоторые "запаздывающие" проблемы . Когда я нажимал кнопки меню «назад» и «вперед», чтобы изменить изображения, например, 15 раз, анимация движения «запаздывает» и не будет происходить при плавном переходе.

Есть какие-нибудь звонки по этому поводу? Могу ли я сделать это умнее?

1 Ответ

0 голосов
/ 02 апреля 2011

Я бы предложил создавать изображения только один раз и использовать их повторно.Кроме того, после анимации я удалил бы старое изображение и сохранил бы его в следующий раз, когда вам понадобится это изображение.Кроме того, когда вы меняете изображение из контейнера 2 в контейнер 1, не создавайте новый, просто переместите изображение из одного контейнера в другой.

Примерно так: код не тестируется, простодать вам представление.

var instances:Object = {};
var currentImage:String;


  //Function receiving an ID from the button click, which we can use to load the connected image
function headerFadeIn(receivedNumber:Number):void
{
    //Getting container2 rdy to tween from 0 -> 1
    pictureContainer2_mc.alpha = 0;

    //Preparing image string - linkagename
    currentImage = "header_image" + receivedNumber;

    var headImage:Bitmap = _getImage(currentImage);

    pictureContainer2_mc.addChild(headImage);

    //Tweening currecntly added image from 0 -> 1
    //When tween is done call function onFinishTween to swap containers  
    TweenLite.to(pictureContainer2_mc,1,{alpha:1, ease:menuEasing, onComplete:onFinishTween});

    function onFinishTween():void
    {
        //Setting currently loaded image in container 1
            //cast returned DisplayObject into a Bitmap.        
        var headImage:Bitmap = pictureConainer2_mc.getChildByName(currentImage) as Bitmap;

        pictureContainer1_mc.addChild(headImage);

        pictureContainer2_mc.alpha = 0;
    }
}

function _getImage(id:String):Bitmap{
    if( instances[id] ) return instances[id];

    //Loading the image into container 1
    var headImage:Bitmap = new Bitmap();
    var classDefinition:Class = getDefinitionByName(tempName) as Class;
    var img:BitmapData = new classDefinition(1,1);
    headImage.bitmapData = img;

    instances[id] = headImage;

    return headImage;

}
...