Просмотр полной версии : Как получить путь к основной сцене из клипа находящегося на ней
boomerFlasher
27.04.2007, 17:23
Ситуация следующая.
Есть основной файл - за все что в нем будет твориться отвечает класс MainSystem следующего содержания:
class Classes.MainSystem {
function MainSystem() {
}
}
вызывается этот класс во фла следующим образом:
import Classes.MainSystem;
var startMainSystem:MainSystem = new MainSystem();
На основной сцене находится кнопка за действие которой отвечает следующий класс EnterSystem:
class Classes.ButtonSystem.EnterSystem extends MovieClip {
function EnterSystem() {
}
private function onRelease():Void {
// Как получить отсюда ссылку к основной сцене кроме такого способа,
// учитывая что основная сцена будет характеризоваться классом Classes.MainSystem?
trace(this._parent);
}
}
Цель: получить доступ к основной сцене (к классу MainSystem) из этой кнопки, но не таким методом - this._parent, который написан у меня в классе.
Можно было конечно задать поведение для кнопки и в основном классе но я хочу добиться полной независимости кнопки от класса MainSystem, чтобы весь код для нее лежал в соответствующем для неё классе. Надесюь доступно объяснил, всем спасибо кто вразумит и наставит на путь истинный.
CCCPirate
27.04.2007, 17:28
_root.startMainSystem
screamge
27.04.2007, 17:28
this._parent, _root и прочая убогость не катит в классах.
по сабжу, второй класс нужно экстендить от первого, а первому нужно передавать ссылку на объект.
CCCPirate
27.04.2007, 17:32
this._parent, _root и прочая убогость не катит в классах.
кто сказал?
а передавать ты как собрался?
screamge
27.04.2007, 17:37
class Classes.MainSystem {
private var _mc:MovieClip; // ссылка на объект
function MainSystem(mc:MovieClip):Void {
_mc = mc; // создаём ссылку
}
}
class Classes.ButtonSystem.EnterSystem extends MainSystem{
function EnterSystem() {
}
private function onRelease():Void {
trace(_mc);
}
}
//код во фла
import Classes.MainSystem;
var startMainSystem:MainSystem = new MainSystem(this);
писал на коленях, смысл я надеюсь понятен
Использовать паттерн Синглтон.
screamge, работать не будет.
boomerFlasher
27.04.2007, 17:38
по сабжу, второй класс нужно экстендить от первого, а первому нужно передавать ссылку на объект.
Думал об этом, но если допустить такой вариант что у меня несколько разных кнопок, при нажатии которых выполняются разные функции, а при наведении и отведении на них выполняются одни и те же действия.
Тогда по логике надо сделать класс который будет отвечать за действия при наведении и отведении и уже от него экстендить все эти кнопки а в самом классе кнопки прописывать действия при нажатии на кнопку, как тогда экстендить кнопки от основного класса, ведь множественное наследование не разрешено в AS2 ...
Примерно так:
class Classes.ButtonSystem.AnimationMainSystemButton extends MovieClip {
function AnimationMainSystemButton() {
}
private function onRollOver():Void {
}
private function onRollOut():Void {
}
}
import Classes.ButtonSystem.AnimationMainSystemButton;
//
class Classes.ButtonSystem.EnterRegistration extends AnimationMainSystemButton {
function EnterRegistration() {
}
private function onRelease():Void {
}
}
screamge
27.04.2007, 17:42
__etc, у меня сейчас нет возможности проверить. Где ошибка то?
__etc, у меня сейчас нет возможности проверить. Где ошибка то?
В том, что ты не понимаешь, для чего нужно наследование.
CCCPirate
27.04.2007, 17:54
2screamge а то что ты написал конечно не убогость))))
boomerFlasher пользуй рут и не заморачивайся
boomerFlasher: Ээээ, на мой скромный взгляд вы как то неправильно понимаете ООП...
Кнопка, вообще по идее, не должны ничего сама делать, при нажатии на нее она должна известить контроллер (например под средством event'ов), что на нее нажали, и контроллер уже в зависимости от того что за кнопка должен исполнить соответствующую команду.
screamge
27.04.2007, 17:56
:umnik2: :umnik2: :umnik2:
ссылки на объекты не могут наследоваться? :boredom:только методы и свойства?
boomerFlasher
27.04.2007, 17:57
Использовать паттерн Синглтон.
А можно подробнее, как организовать это во Flash?
screamge
27.04.2007, 18:01
2screamge а то что ты написал конечно не убогость))))
boomerFlasher пользуй рут и не заморачивайся
Не эстет ты:) у тебя теряется всякая манёвренность и больше чем на один проект ты этот класс использовать не сможешь:drinks:
boomerFlasher
27.04.2007, 18:03
Кнопка, вообще по идее, не должны ничего сама делать, при нажатии на нее она должна известить контроллер (например под средством event'ов), что на нее нажали, и контроллер уже в зависимости от того что за кнопка должен исполнить соответствующую команду.
Мысль верная, но в моём случае она мне не подходит ...
CCCPirate
27.04.2007, 18:04
Не эстет ты:) у тебя теряется всякая манёвренность и больше чем на один проект ты этот класс использовать не сможешь:drinks:
ужасно. что такой ценный класс потеряет маневренность, давайте уже в баннеры ООП засовывать
screamge
27.04.2007, 18:06
о ценности класса это у автора нужно спросить:)
boomerFlasher
27.04.2007, 18:11
ужасно. что такой ценный класс потеряет маневренность, давайте уже в баннеры ООП засовывать
Вообще-то уважаемый в данном случае я написал на Флэше комплекс лабораторных работ по ЖБК который завязан на Flash+PHP+MySQL и общий код всего комплекса занимает порядка 7 000 строк, просто все это раньше было в кадрах, я решил портировать это в классы - удобства и порядка ради ...
А в баннеры мы лучше AS3 засунем ... :victory:
CCCPirate
27.04.2007, 18:19
Вообще-то уважаемый в данном случае я написал на Флэше комплекс лабораторных работ по ЖБК который завязан на Flash+PHP+MySQL и общий код всего комплекса занимает порядка 7 000 строк, просто все это раньше было в кадрах, я решил портировать это в классы - удобства и порядка ради ...
А в баннеры мы лучше AS3 засунем ... :victory:
ах да конечно, извините, обязательно опубликуйте данный класс для всех жаждущих написать комплекс лабораторных работ по ЖБК, но только с подробными коментариями, а то вдруг массовый потребитель не разберется:bye:
Мысль верная, но в моём случае она мне не подходит ...
А можно спросить уважаемого, чем эта "Мысль верная" Вам не подходит?
MainSystem ведь во всем проекте планируется использовать только один? Тогда можно сделать в самом классе статическое свойство, которое хранит в себе ссылку на созданный экземпляр.
CCCPirate, я не понял, что за сарказм?
CCCPirate
27.04.2007, 18:38
CCCPirate, я не понял, что за сарказм?
Непонимаю зачем усложнять простое? _root. обращение или предложенная тобой статическая ссылка или глобальная переменная - неважно, это самые простые пути решения поставленной задачи - как прямая - самый короткий путь между точками, а танцы с бубном вокруг принципов ООП и универсальности классов - это из разряда извращений или эстетства(как говорят некоторые)
Одна из задача класса, это работать без вмешательства в его код. _root это нарушает. Вдруг лабораторные работы надо будет сделать и для друго предмета, а там структура слегка изменится? Единственное место где я вижу его использование, это получение переменных переданных через flashVars.
CCCPirate
27.04.2007, 18:48
каждому - свое, этот вариант в любом случае остается действенным решением.
"Вдруг лабораторные работы надо будет сделать и для друго предмета, а там структура слегка изменится?"
раз уж ты дописал, то и я допишу: давайте к автомобилю приделаем весла вдруг он поплывет?
раз уж ты дописал, то и я допишу: давайте к автомобилю приделаем весла вдруг он поплывет?Вот своим рутом ты и делаешь сразу автомобиль. А я делаю транспорт, которому могу приделать колеса и он станет автомобилем, а могу весла, и он станет лодкой.
А можно подробнее, как организовать это во Flash?
Открыть гугл и найти примеры синглтонов.
boomerFlasher
28.04.2007, 13:53
Спасибо большое __etc и iNils.
В классе MainSystem я сделал синглтон и через него я цепляюсь к классу из любого места и в любое время
class Classes.MainSystem extends MovieClip {
private static var _instance:MainSystem = null;
public static var scope:MovieClip;
function MainSystem(target:MovieClip) {
scope = target;
}
public static function getInstance():MainSystem {
if (_instance == null) {
MainSystem._instance = new MainSystem(scope);
}
return MainSystem._instance;
}
}
а также я ввел стат. переменную scope, как и подсказывал iNils и благодаря ей я могу в любое время подцепиться к основной сцене и произвести какие либо действия с контентом кторый уже находится на этой сцене. Всем еще раз спасибо, дисскусия закрыта.
:bye:
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.