AS3 Динамическое добавление кнопок на сцену и доступ к различным функциям - PullRequest
0 голосов
/ 11 января 2012

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

Я предполагаю, что я делаю это неправильно?Вот мой код, чтобы вы могли лучше понять:

package src  {

import flash.display.MovieClip;
import flash.events.*;
import flash.utils.Timer;
import flash.net.*
import flash.display.Loader

public class main extends MovieClip {

public var xmlData:XML = new XML
public var currentName = null

    public function main() {
        var y = 0
        for(x=0; x<=6; x++){
            var names:namez = new namez
            namez.ID = y
            y++
            names.y = x*25
            names.addEventListener(MouseEvent.CLICK, checkMe)
            spinner.addChild(names)
        }
    }

    public function checkMe(e:MouseEvent){
        trace("clicked"+namez.ID)
    }
}
}

namez.as class:

package src {

import flash.display.MovieClip

public class namez extends MovieClip{

    internal static var ID

    public function namez() {
    }

}

}

Несмотря на то, что выполняется трассировка для кнопок для namez.ID и она правильно показывает 0,1,2,3,4,5,6 при нажатии кнопки отображается только число 6.

Как правильно сделать, чтобы динамически добавленные кнопки были доступны другим функциям?Должен ли я использовать массив здесь?

К вашему сведению, общее количество необходимых кнопок - 241.

Ответы [ 2 ]

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

Поскольку ID является статической переменной, это означает, что существует только один идентификатор для всех экземпляров namez, тогда как кажется, что вы хотите идентификатор для каждого экземпляра.Просто удалите атрибут static и определите идентификатор следующим образом:

internal var ID

Хороший улов Pbirkoff о том, как вы получаете доступ к свойству .ID, но вы также можете привести цель события к namezкласс для доступа к дополнительным пользовательским свойствам.

Я также отмечаю, что вам не хватает некоторых точек с запятой и определений типов, которые могут или не могут потребоваться, но являются хорошей практикой программирования:

public function main():void {
    var y:int = 0
    for (x:int = 0; x<=6; x++) {
        var names:namez = new namez();
        namez.ID = y;
        y++;
        names.y = x*25;
        names.addEventListener(MouseEvent.CLICK, checkMe);
        spinner.addChild(names);
    }
}

private function checkMe(e:MouseEvent):void {
    var names:namez = e.target as namez;
    trace("clicked" + names.ID);
}
1 голос
/ 11 января 2012

Я думаю, что проблема заключается в том, что ID на namez является статическим.Таким образом, вы присваиваете значение Id не конкретному экземпляру, а классу namez.

Делайте переменную открытым свойством

public var Id:int;

Кроме того, в вашей функции EventListener checkMe, вы снова ссылаетесь на класс namez, а не на экземпляр.Измените функцию на:

public function checkMe(e:MouseEvent)
{
    trace('clicked: ' + e.target.Id);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...