Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Передать переменную по ссылке (http://www.flasher.ru/forum/showthread.php?t=137074)

aassaaa 04.03.2010 01:44

Передать переменную по ссылке
 
Добрый день!

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

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

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

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

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

dimarik 04.03.2010 02:36

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

Цитата:

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

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

aassaaa 04.03.2010 10:16

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

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

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

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

Код AS3:

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 кодирования. си стайл режет глаза.
и не пишите в кадрах - пишите в классах.
заведите документ класс и скопируйте код туда. ( соответственно описав переменные и методы как public/private и поместив код вне ф-ций в конструктор)

в методе new_subm вы создаёте ub - а как вы собираетесь его удалять? поместите ub в массив ubList .
Код AS3:

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 статическую переменную
Код AS3:

static public var staticVar:SmthClass;

доступ извне:
Код AS3:

CustomClass.staticVar



Часовой пояс GMT +4, время: 05:07.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.