По какой-то причине неопределенный массив MovieClip (Actionscript 3.0) - PullRequest
1 голос
/ 20 января 2012

Я просто пытаюсь сделать одну из тех игр "матч-2". Я только начал это делать, и, поскольку я новичок, я пытаюсь понять, как работают массивы. Поэтому я написал эту простую программу:

package  {

import flash.display.MovieClip;
import flash.events.MouseEvent;

public class Main extends MovieClip
{
    var Ar:Array = [];
    Ar[0] = A;
    Ar[1] = B;
    Ar[2] = C;

    public function Main()
    {
        for( var i = 0; i < 3;  i++ )
        {
            Ar.buttonMode = true;
            Ar[i].addEventListener( MouseEvent.MOUSE_OVER, MouseOverAct );
            Ar[i].addEventListener( MouseEvent.MOUSE_OUT, MouseOutAct );
        }
    }

    public function MouseOverAct( mouseEvent:MouseEvent ):void
    {
        mouseEvent.target.alpha = 0.1;
    }

    public function MouseOutAct( mouseEvent:MouseEvent ):void
    {
        mouseEvent.target.alpha = 1.0;
    }
}

}

Однако, после объявления массива и попытки поместить мувиклипы (которые уже находятся на сцене, с именами экземпляров A, B, C), я получаю ошибку «Неопределенное свойство». Я попытался исправить это с помощью Ar.push (), но он не работает также. Кто-нибудь может мне помочь?

1 Ответ

2 голосов
/ 20 января 2012

Это

var Ar:Array = [];
Ar[0] = A;
Ar[1] = B;
Ar[2] = C;

неверный код. Вы должны инициализировать свойство экземпляра (в вашем случае массив) либо при объявлении переменной, либо при любом методе. Можно инициализировать статические свойства в статическом блоке. Я думаю, что ссылка о статической инициализации блока будет полезна для вас. Так что вы должны сделать либо:

public var _array:Array = [A, B, C];

или

public var _array:Array;

public function Main()
{
    _array = [A, B, C];
    for( var i = 0; i < 3;  i++ )
    {
        _array.buttonMode = true;
        _array[i].addEventListener( MouseEvent.MOUSE_OVER, mouseOverHandler );
        _array[i].addEventListener( MouseEvent.MOUSE_OUT, mouseOutHandler );
    }
}
...