PDA

Просмотр полной версии : Передать переменную по ссылке


aassaaa
04.03.2010, 01:44
Добрый день!

Ситуация следующая:

На главной временной шкале раз в 3 секунды создается экземпляр класса наследника MovieClip. Ссылки на них никак не сохраняются.

Еще на той же временной шкале создается массив, элементы которого постоянно меняются.

Так вот нужно как-то из экземпляра класса добраться до этого массива на главной шкале! Как это сделать?

ps^ После 5ти лет программирования на php ничего не придумал кроме как попробовать сделать массив глобальной переменной (но не получилось) или передать ссылку на массив в экземпляр класса (что тоже не получилось)... Как это в as делаеся?

dimarik
04.03.2010, 02:36
Вы правильно мыслите. Тут два пути: либо объект сам пойдет за ссылкой, либо его этой ссылкой снабдят. Почему у Вас не получилось - поймет дифдиагноз. Код дайте )

На главной временной шкале раз в 3 секунды создается экземпляр класса наследника MovieClip. Ссылки на них никак не сохраняются.

А вот это Вы поторопились ультиматировать. Наверняка же добавляете (addChild или разновидность) их в DisplayList ). А это уже статья ссылка.

aassaaa
04.03.2010, 10:16
После вашего ответа меня осенило)
Передал ссылку, заработало!

Но а можно ли из самого класса пойти и взять любую из переменных временной шкалы или они никак не связаны?

И еще. Вот сам код.
Этот тут я пытался в ub передать ссылку на mines

Оцените сам код, подскажите может что-то по другому делать нужно было.
Учусь я :)

var mines = new Array();
var minesCount:int = 15;

var timer:Timer = new Timer(3000);
timer.addEventListener(TimerEvent.TIMER,new_subm);
timer.start();


drop_mine();

function new_subm(evt:Event):void {
var ub:Subm = new Subm(mines);
addChild(ub);
ub.go();
}

function drop_mine():void {
for (var i:int = 0; i < minesCount; i++) {
var mine:MovieClip = new Mine();
mine.x = Math.random()*this.width;
mine.y = Math.random()*200+140;
mine.alpha = .5;

this.addChild(mine);
mines[mines.length] = mine;
}
}

Котяра
04.03.2010, 10:49
Привыкайте к конвенциям AS3 кодирования (http://opensource.adobe.com/wiki/display/flexsdk/Coding+Conventions). си стайл режет глаза.
и не пишите в кадрах - пишите в классах.
заведите документ класс и скопируйте код туда. ( соответственно описав переменные и методы как public/private и поместив код вне ф-ций в конструктор)

в методе new_subm вы создаёте ub - а как вы собираетесь его удалять? поместите ub в массив ubList .
mines[mines.length] = mine; ->mines.push(mine)
и вообще криво всё как-то.. как я понял вы из ub вызываете drop_mine?
не надо так делать. лучше делать через события.
И вообще я бы вам посоветовал сначала чуток почитать, например, Мука - сейчас у вас каша в голове..

aassaaa
04.03.2010, 14:02
Я с AS третий день только играюсь и в голове и правда каша, но думаю я ее разгребу.
Спасибо за ответ

Elser
04.03.2010, 14:32
и на счет передачи по ссылке или по значению:
все что наследуется от Object передается по ссылке, все остальное (String, uint, и т.д.) по значению

aassaaa
04.03.2010, 14:38
А есть в AS глобальные переменные? Ну вот чтобы не передавать ссылку, а просто полезть в главную временную шкалу и просто взять там то что нужно

Котяра
04.03.2010, 17:43
забудьте про шкалу.. шкала есть только в мувиклипах.
основной класс документа может быть и без таймлайна.
глобальные переменные зло. но если очень и очень надо можно сделать.
заведите в классе CustomClass статическую переменную
static public var staticVar:SmthClass;
доступ извне: CustomClass.staticVar