Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   ссылка на свойство stage (http://www.flasher.ru/forum/showthread.php?t=137155)

tkaChuck 05.03.2010 19:38

ссылка на свойство stage
 
Здравствуйте.
Я, в общем, это. У меня есть некоторый массив, объявленный прямо в stage. Я хочу ссылку на этот массив. То есть грубо говоря если работает
Код AS3:

var a1:Array=new Array(1,2,3);
var a2:Array=a1; //типа ссылка на a1
trace(a2); //1,2,3
 
a2[0]=4; 
trace(а1); //4,2,3

, то должно както работать и чтото вроде
Код AS3:

//это в stage
var a1:Array=new Array(1,2,3);
 
//а это гдето в дисплейлисте
var a2:Array=stage.a1;

но компилятор на такое говорит, что 1119: Access of possibly undefined property prtf through a reference with static type flash.display:Stage

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

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

relevance4 05.03.2010 20:44

Цитата:

Сообщение от tkaChuck (Сообщение 891237)
объявленный прямо в stage.

stage != document class, если вы об этом.

Цитата:

Сообщение от tkaChuck (Сообщение 891237)
все, чего хочу я - иметь доступ к этому массиву из разных объектов. как сделать такую ссылку?

Код AS3:

можно так:
obj = new Class(a1);
или так
obj = new Class(this);

но это, наверное, не правильно.

Psycho Tiger 05.03.2010 21:22

Если такой массив один - сделайте статическую переменную.

Zebestov 05.03.2010 21:24

создай какой-то public class MyArray и в нем сделай static public var a:Array = [];
и будет тебе read/write доступ к этому массиву из всех объектов посредством MyArray.a

tkaChuck 06.03.2010 04:40

спасибо, товарищи.

2relevance4: такую конструкцию я ранее не видал. это как бы мы говорим что obj будет новым экземпляром класса Class, и передаем конструктору этого класса наш массив a1? боюсь и подумать какое исчадие это породит. или проделываем то же самое, но с this. a this в том, что раньше называлось _root, разве не будет означать stage? какой с этого прок? я конечно почитаю про Class, но похоже, я Вас просто не понимаю..

2Psycho Tiger: вот оно! массив-то как раз один, но. как мне объявить ее в stage, ну или как это правильно сказать.

2Zebestov: да вот как раз пытался. но не могу до конца освободиться от идеологии AS1/AS2. я сделал класс, и этот массив теперь свойство класса. далее я создаю экземляр этого класса В STAGE, потому что где же еще, и имею 1119: Access of possibly undefined property through a reference with static type. хорошо, наверно в stage ничего класть не принято, а тогда ГДЕ ЭТОТ ОБЪЕКТ СОЗДАВАТЬ?

вообше, знаете, просто пробивая по поиску тяжело понять вообще, это. ЗАЧЕМ НУЖНЫ статические классы. безопасность? ОТ КОГО? и зачем все элементы класса по дефолту private? хороший сыщик подозревает самого себя? и почему обращаться к родителю из потомка это дурной тон? И ПОЧЕМУ НЕЛЬЗЯ УДАЛЯТЬ ОБЪЕКТЫ ВРУЧНУЮ???? простите за оффтоп.. может кто посоветует хорошую книгу.

Cornford 06.03.2010 14:32

а вот интересно почему эта строчка: trace(а1); //4,2,3 выдаёт 4,2,3, ведь мы меняем первый элемент у массива а2, он связан с а1 но а1 не связан с а2

Obi 06.03.2010 14:49

Цитата:

Сообщение от Cornford (Сообщение 891346)
а вот интересно почему эта строчка: trace(а1); //4,2,3 выдаёт 4,2,3, ведь мы меняем первый элемент у массива а2, он связан с а1 но а1 не связан с а2

Вы меняете элемент у первого массива. a2 — всего лишь ссылка на массив a1.

Elser 06.03.2010 15:30

Код AS3:

var needEmptyArray:Boolean = true; // ну это может перестарался, но люблю объяснять кодом ))
var a2:Array = (stage != null) ? (stage as MovieClip).a1 : needEmptyArray ? new Aray() : null;


Obi 06.03.2010 15:44

Цитата:

Сообщение от Elser (Сообщение 891378)
Код AS3:

var a2:Array = (stage != null) ? (stage as MovieClip).a1 : needEmptyArray ? new Aray() : null;


Прошу прощения за оффтоп, но я надеюсь что мне никогда не придется разбираться в вашем коде.

Elser 06.03.2010 16:17

хорошо, выбирайте кому что нравится )
Код AS3:

//так я делаю в API разных модулей для Obi и ему подобных:
 
var needEmptyArray:Boolean = true;
var a2:Array;
if(stage != null) {
  a2 = (stage as MovieClip).a1;
} else {
  if(needEmptyArray){
        a2 = new Array();
  } else {
        a2 = null;
  }
}
 
//а так я делаю для себя и тех кто не испытывает особых затруднений с чтением кода:
 
var needEmptyArray:Boolean = true;
var a2:Array = (stage != null)
    ? (stage as MovieClip).a1
    : needEmptyArray
        ? new Aray()
        : null;



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

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