![]() |
|
||||||||||
|
|||||
|
Регистрация: Dec 2008
Сообщений: 20
|
Всем здравствуйте!=)
Никак не могу поймать "фишки" ООП ActionScript3. В php прекрасно получалось, здесь немного растерялся. Значит создаю flash док. для примера. В нем два произвольных объекта, связанных со своими классами. К примеру, obj1 и obj2. Файлы структуры package {import flash.display.MovieClip; public dynamic class obj1{}public var somevar:String="some text"; function obj1(){}trace(obj2.somevar)} хочу, чтобы obj1 "слышал" obj2. нужно для этого дубликаты классов создавать? или дуиликат с именем класса при старте создается? Проблема в том, что вышеописанный код в функции-конструкторе выдает ошибку: 1119: Access of possibly undefined property somevar through a reference with static type Class. Просто хотелось бы услышать совет как лучше обеспечивать связь и видимость классов в сложном проекте. Спасибо. |
|
|||||
|
Есть разные методы проектирования. Здесь AS3 или php разница не принципиальная. А ошибка у вас возникает из-за того, что экземпляр класса obj1 не имеет ссылки на свойство(или метод) с именем obj2. Вероятно вам нужно области видимости повторить.
|
|
|||||
|
Регистрация: Dec 2008
Сообщений: 20
|
А в AS3 есть что-то вроде global в php?
Ну, т.е. прямо внутри класса obj1 пропасать (к примеру) global obj2? |
|
|||||
|
стервочка (я мужик)
|
в ООП это называется static.
Последний раз редактировалось BlooDHounD; 14.12.2008 в 21:10. |
|
|||||
|
Регистрация: Dec 2008
Сообщений: 20
|
т.е., код, к примеру, должен быть таким?:
package { import flash.display.MovieClip; public dynamic class obj1{ public var somevar:String="some text"; function obj1(){ trace(obj2.somevar) //возвращает Error.... static obj2; trace(obj2.somevar) //возвращает "some text" } } } Бред какой-то получается, т.к. static как раз не позволяет слушать/изменять класс. Для этого они dynamic и объявлены... |
|
|||||
|
ветеран форума
|
Что такое у Вас obj2? он нигде не объявлен.
Похоже с ООП в PHP у Вас тоже опыта маловато. http://php.ru/manual/language.oop5.static.html - читать про static в php В ас3 оно функционирует так же. dynamic - дает право на добавление классу свойств/методов на стадии выполнения и в общем случае его использование нежелательно, так как вносит неопределенность относительно наличия/отсутствия у класса функционала и увеличивает количество ошибок.
__________________
4am is time to rock |
|
|||||
|
Регистрация: Dec 2008
Сообщений: 20
|
obj2 - тоже самое что obj1.
К объекту MovieClip привязан класс. Если он присутствует на первом кадре, дубликат класса автоматом создается? Если да, то с каким именем? С именем объекта MovieClip? Добавлено через 47 минут Да, при старте создается экземпляр класса с именем, указанным в properties объекта. По ходу начинаю втягиваться))))))))))))))) |
|
|||||
|
Flash Aксакал
Регистрация: Jun 2005
Сообщений: 636
|
Нда, видать крутой у вас ООП в ПХП был
![]() Класс obj1 - у вас к MovieClip'у ни каким местом не привязан Дубликат класса ![]() Если как Вы грите что класс obj1 привязан к MovieClip'у - для начала он должен наследоваться от MovieClip, тем самым расширяя базовый класс. На тему как это в PHP Есть классы и и экземпляры класса. Если у вас есть какой нить мувик, который лежит сцене, это фактически экземпляр класса (который расширяет базовый класс флэш плеера - flash.display.MovieClip). Ну и т.д. О Перечитал, и понял в чем "фишка"Вы хотите повторить подобную конструкцию во флэше?
Во флэше есть понятие документ класс. То есть флэше плеер создает при загрузке swf файла, экземпляр Document Class'а ассоциированный с этим swf файлом. Как задать этот класс - про это тут (на английском). Последний раз редактировалось 7thsky™; 15.12.2008 в 00:47. |
|
|||||
|
стервочка (я мужик)
|
я думал, что в этой строчке:
идёт обращение к классу obj2, и соответственно свойство somevar должно быть статическим. а тут видимо совсем беда ...
|
|
|||||
|
Modus ponens
|
Собственно, применительно к ПХП примеру выше: в АС тоже можно складывать несколько классов в один файл (физически), но есть различия с ПХП / C# и тому подобными... т.е. это можно делать только если:
- существует только одна паблик сущность (т.е. только 1 класс / функция / переменная / неймспейс с модификатором доступа типа public). - все остальные классы / функции и т.д. объявленные в этом же файле будут автоматически помещены в неймспейс private и доступны только "соседям по файлу". В данной ситуации global не нужен, т.как все классы объявленные в одном файле будут видны друг другу, но, с перечисленными выше ограничениями.
__________________
Hell is the possibility of sanity Последний раз редактировалось wvxvw; 15.12.2008 в 01:01. |
![]() |
![]() |
Часовой пояс GMT +4, время: 02:48. |
|
|
« Предыдущая тема | Следующая тема » |
|
|