Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Как получить путь к основной сцене из клипа находящегося на ней (http://www.flasher.ru/forum/showthread.php?t=95121)

boomerFlasher 27.04.2007 17:23

Как получить путь к основной сцене из клипа находящегося на ней
 
Вложений: 1
Ситуация следующая.
Есть основной файл - за все что в нем будет твориться отвечает класс 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

Цитата:

Сообщение от screamge
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);

писал на коленях, смысл я надеюсь понятен

etc 27.04.2007 17:38

Использовать паттерн Синглтон.

screamge, работать не будет.

boomerFlasher 27.04.2007 17:38

Цитата:

Сообщение от screamge
по сабжу, второй класс нужно экстендить от первого, а первому нужно передавать ссылку на объект.

Думал об этом, но если допустить такой вариант что у меня несколько разных кнопок, при нажатии которых выполняются разные функции, а при наведении и отведении на них выполняются одни и те же действия.

Тогда по логике надо сделать класс который будет отвечать за действия при наведении и отведении и уже от него экстендить все эти кнопки а в самом классе кнопки прописывать действия при нажатии на кнопку, как тогда экстендить кнопки от основного класса, ведь множественное наследование не разрешено в 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 27.04.2007 17:44

Цитата:

Сообщение от screamge
__etc, у меня сейчас нет возможности проверить. Где ошибка то?

В том, что ты не понимаешь, для чего нужно наследование.

CCCPirate 27.04.2007 17:54

2screamge а то что ты написал конечно не убогость))))

boomerFlasher пользуй рут и не заморачивайся

7thsky™ 27.04.2007 17:54

boomerFlasher: Ээээ, на мой скромный взгляд вы как то неправильно понимаете ООП...

Кнопка, вообще по идее, не должны ничего сама делать, при нажатии на нее она должна известить контроллер (например под средством event'ов), что на нее нажали, и контроллер уже в зависимости от того что за кнопка должен исполнить соответствующую команду.

screamge 27.04.2007 17:56

:umnik2: :umnik2: :umnik2:

ссылки на объекты не могут наследоваться? :boredom:только методы и свойства?

boomerFlasher 27.04.2007 17:57

Цитата:

Сообщение от __etc
Использовать паттерн Синглтон.

А можно подробнее, как организовать это во Flash?

screamge 27.04.2007 18:01

Цитата:

Сообщение от CCCPirate
2screamge а то что ты написал конечно не убогость))))

boomerFlasher пользуй рут и не заморачивайся

Не эстет ты:) у тебя теряется всякая манёвренность и больше чем на один проект ты этот класс использовать не сможешь:drinks:

boomerFlasher 27.04.2007 18:03

Цитата:

Сообщение от 7thsky™
Кнопка, вообще по идее, не должны ничего сама делать, при нажатии на нее она должна известить контроллер (например под средством event'ов), что на нее нажали, и контроллер уже в зависимости от того что за кнопка должен исполнить соответствующую команду.

Мысль верная, но в моём случае она мне не подходит ...

CCCPirate 27.04.2007 18:04

Цитата:

Сообщение от screamge
Не эстет ты:) у тебя теряется всякая манёвренность и больше чем на один проект ты этот класс использовать не сможешь:drinks:

ужасно. что такой ценный класс потеряет маневренность, давайте уже в баннеры ООП засовывать

screamge 27.04.2007 18:06

о ценности класса это у автора нужно спросить:)

boomerFlasher 27.04.2007 18:11

Цитата:

Сообщение от CCCPirate
ужасно. что такой ценный класс потеряет маневренность, давайте уже в баннеры ООП засовывать

Вообще-то уважаемый в данном случае я написал на Флэше комплекс лабораторных работ по ЖБК который завязан на Flash+PHP+MySQL и общий код всего комплекса занимает порядка 7 000 строк, просто все это раньше было в кадрах, я решил портировать это в классы - удобства и порядка ради ...

А в баннеры мы лучше AS3 засунем ... :victory:

CCCPirate 27.04.2007 18:19

Цитата:

Сообщение от boomerFlasher
Вообще-то уважаемый в данном случае я написал на Флэше комплекс лабораторных работ по ЖБК который завязан на Flash+PHP+MySQL и общий код всего комплекса занимает порядка 7 000 строк, просто все это раньше было в кадрах, я решил портировать это в классы - удобства и порядка ради ...

А в баннеры мы лучше AS3 засунем ... :victory:

ах да конечно, извините, обязательно опубликуйте данный класс для всех жаждущих написать комплекс лабораторных работ по ЖБК, но только с подробными коментариями, а то вдруг массовый потребитель не разберется:bye:

7thsky™ 27.04.2007 18:28

Цитата:

Сообщение от boomerFlasher
Мысль верная, но в моём случае она мне не подходит ...

А можно спросить уважаемого, чем эта "Мысль верная" Вам не подходит?

iNils 27.04.2007 18:28

MainSystem ведь во всем проекте планируется использовать только один? Тогда можно сделать в самом классе статическое свойство, которое хранит в себе ссылку на созданный экземпляр.

CCCPirate, я не понял, что за сарказм?

CCCPirate 27.04.2007 18:38

Цитата:

Сообщение от iNils
CCCPirate, я не понял, что за сарказм?

Непонимаю зачем усложнять простое? _root. обращение или предложенная тобой статическая ссылка или глобальная переменная - неважно, это самые простые пути решения поставленной задачи - как прямая - самый короткий путь между точками, а танцы с бубном вокруг принципов ООП и универсальности классов - это из разряда извращений или эстетства(как говорят некоторые)

iNils 27.04.2007 18:41

Одна из задача класса, это работать без вмешательства в его код. _root это нарушает. Вдруг лабораторные работы надо будет сделать и для друго предмета, а там структура слегка изменится? Единственное место где я вижу его использование, это получение переменных переданных через flashVars.

CCCPirate 27.04.2007 18:48

каждому - свое, этот вариант в любом случае остается действенным решением.

"Вдруг лабораторные работы надо будет сделать и для друго предмета, а там структура слегка изменится?"

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

iNils 27.04.2007 19:33

Цитата:

Сообщение от CCCPirate
раз уж ты дописал, то и я допишу: давайте к автомобилю приделаем весла вдруг он поплывет?

Вот своим рутом ты и делаешь сразу автомобиль. А я делаю транспорт, которому могу приделать колеса и он станет автомобилем, а могу весла, и он станет лодкой.

etc 27.04.2007 21:43

Цитата:

Сообщение от boomerFlasher
А можно подробнее, как организовать это во 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:


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

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