![]() |
Развитой ООП
Всем здравствуйте!=)
Никак не могу поймать "фишки" ООП ActionScript3. В php прекрасно получалось, здесь немного растерялся. Значит создаю flash док. для примера. В нем два произвольных объекта, связанных со своими классами. К примеру, obj1 и obj2. Файлы структуры Код AS3:
хочу, чтобы obj1 "слышал" obj2. нужно для этого дубликаты классов создавать? или дуиликат с именем класса при старте создается? Проблема в том, что вышеописанный код в функции-конструкторе выдает ошибку: 1119: Access of possibly undefined property somevar through a reference with static type Class. Просто хотелось бы услышать совет как лучше обеспечивать связь и видимость классов в сложном проекте. Спасибо. |
Есть разные методы проектирования. Здесь AS3 или php разница не принципиальная. А ошибка у вас возникает из-за того, что экземпляр класса obj1 не имеет ссылки на свойство(или метод) с именем obj2. Вероятно вам нужно области видимости повторить.
|
А в AS3 есть что-то вроде global в php?
Ну, т.е. прямо внутри класса obj1 пропасать (к примеру) global obj2? |
в ООП это называется static.
|
т.е., код, к примеру, должен быть таким?:
Код AS3:
Бред какой-то получается, т.к. static как раз не позволяет слушать/изменять класс. Для этого они dynamic и объявлены... |
Что такое у Вас obj2? он нигде не объявлен.
Похоже с ООП в PHP у Вас тоже опыта маловато. http://php.ru/manual/language.oop5.static.html - читать про static в php В ас3 оно функционирует так же. dynamic - дает право на добавление классу свойств/методов на стадии выполнения и в общем случае его использование нежелательно, так как вносит неопределенность относительно наличия/отсутствия у класса функционала и увеличивает количество ошибок. |
obj2 - тоже самое что obj1.
К объекту MovieClip привязан класс. Если он присутствует на первом кадре, дубликат класса автоматом создается? Если да, то с каким именем? С именем объекта MovieClip? Добавлено через 47 минут Да, при старте создается экземпляр класса с именем, указанным в properties объекта. По ходу начинаю втягиваться))))))))))))))) |
Нда, видать крутой у вас ООП в ПХП был :)
Класс obj1 - у вас к MovieClip'у ни каким местом не привязан :) Дубликат класса :) Если как Вы грите что класс obj1 привязан к MovieClip'у - для начала он должен наследоваться от MovieClip, тем самым расширяя базовый класс. На тему как это в PHP Есть классы и и экземпляры класса. Если у вас есть какой нить мувик, который лежит сцене, это фактически экземпляр класса (который расширяет базовый класс флэш плеера - flash.display.MovieClip). Ну и т.д. О :) Перечитал, и понял в чем "фишка" Вы хотите повторить подобную конструкцию во флэше? PHP код:
Во флэше есть понятие документ класс. То есть флэше плеер создает при загрузке swf файла, экземпляр Document Class'а ассоциированный с этим swf файлом. Как задать этот класс - про это тут (на английском). |
я думал, что в этой строчке:
Код:
trace(obj2.somevar) |
Собственно, применительно к ПХП примеру выше: в АС тоже можно складывать несколько классов в один файл (физически), но есть различия с ПХП / C# и тому подобными... т.е. это можно делать только если:
- существует только одна паблик сущность (т.е. только 1 класс / функция / переменная / неймспейс с модификатором доступа типа public). - все остальные классы / функции и т.д. объявленные в этом же файле будут автоматически помещены в неймспейс private и доступны только "соседям по файлу". В данной ситуации global не нужен, т.как все классы объявленные в одном файле будут видны друг другу, но, с перечисленными выше ограничениями. |
| Часовой пояс GMT +4, время: 03:54. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.