Настройка базового спрайта ActionScript 3

#flash #actionscript-3

#flash #actionscript-3

Вопрос:

Я пытаюсь загрузить растровое изображение на сцену, а затем полностью переключать его, используя AS code. Следующее работает, но когда оно добавляет новое растровое изображение на сцену, оно оставляет последнее, таким образом, оставляя загрузку того же растрового изображения.

Есть идеи? Я попытался добавить «removeChild (myLoader);», но это ничего не дало. Большое спасибо.

 import flash.display.MovieClip;
import flash.events.*;

stage.frameRate = 31;
var a =0;

btn111.addEventListener(MouseEvent.CLICK, go);

function go(event:MouseEvent):void
{
    this.addEventListener(Event.ENTER_FRAME, drawrect);

    function drawrect(evt:Event)
    {
        // Create a new instance of the Loader class to work with
        var myLoader:Loader=new Loader();

        // Create a new URLRequest object specifying the location of the external image file
        var myRequest:URLRequest=new URLRequest("logo.png");

        // Call the load method and load the external file with URLRequest object as the parameter
        myLoader.load(myRequest);

        // Add the Loader instance to the display list using the addChild() method
        addChild(myLoader);

        // Position image
        myLoader.x = 100;
        myLoader.y = a  ;

        if(a > 50)
        {
            //removeChild(box);
            removeEventListener(Event.ENTER_FRAME, drawrect);
        }
    }
}
  

Ответ №1:

Ваша проблема в том, что в каждом кадре вы фактически добавляете нового дочернего элемента в список отображения — фактически вы перемещаете не один объект, а загружаете несколько объектов в разных положениях. Вам либо нужно переместить ваш загрузчик в другую функцию, которая не выполняется для каждого кадра, либо вам нужно инкапсулировать ее в if-блок, который проверяет, существует она или нет.

Попробуйте это.

 import flash.display.MovieClip;
import flash.events.*;

stage.frameRate = 31;
var a =0;

private var myLoader:Loader;

btn111.addEventListener(MouseEvent.CLICK, go);

function go(event:MouseEvent):void
{
    this.addEventListener(Event.ENTER_FRAME, drawrect);

    function drawrect(evt:Event)
    {
        if (myLoader == NULL)
        {
            // Create a new instance of the Loader class to work with
            myLoader:Loader=new Loader();

            // Create a new URLRequest object specifying the location of the external image file
            var myRequest:URLRequest=new URLRequest("logo.png");

            // Call the load method and load the external file with URLRequest object as the parameter
            myLoader.load(myRequest);

            // Add the Loader instance to the display list using the addChild() method
            addChild(myLoader);
        }

        // Position image
        myLoader.x = 100;
        myLoader.y = a  ;

        if(a > 50)
        {
            //removeChild(box);
            removeEventListener(Event.ENTER_FRAME, drawrect);
        }
    }
}
  

Кроме того, я бы посоветовал не использовать функции внутри функций (если вы действительно не знаете, что хотите, чтобы это было именно так ….. но вы, вероятно, не хотите, чтобы это было именно так).

Удачи.