Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 14.12.2008, 19:57
Sheff_88 вне форума Посмотреть профиль Отправить личное сообщение для Sheff_88 Найти все сообщения от Sheff_88
  № 1  
Ответить с цитированием
Sheff_88

Регистрация: Dec 2008
Сообщений: 20
По умолчанию Развитой ООП

Всем здравствуйте!=)
Никак не могу поймать "фишки" ООП ActionScript3. В php прекрасно получалось, здесь немного растерялся.

Значит создаю flash док. для примера. В нем два произвольных объекта, связанных со своими классами. К примеру, obj1 и obj2. Файлы структуры
Код AS3:
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.

Просто хотелось бы услышать совет как лучше обеспечивать связь и видимость классов в сложном проекте.

Спасибо.

Старый 14.12.2008, 20:12
kackbip вне форума Посмотреть профиль Отправить личное сообщение для kackbip Найти все сообщения от kackbip
  № 2  
Ответить с цитированием
kackbip
 
Аватар для kackbip

Регистрация: Sep 2007
Адрес: Tomsk
Сообщений: 943
Отправить сообщение для kackbip с помощью ICQ Отправить сообщение для kackbip с помощью Skype™
Есть разные методы проектирования. Здесь AS3 или php разница не принципиальная. А ошибка у вас возникает из-за того, что экземпляр класса obj1 не имеет ссылки на свойство(или метод) с именем obj2. Вероятно вам нужно области видимости повторить.

Старый 14.12.2008, 20:18
Sheff_88 вне форума Посмотреть профиль Отправить личное сообщение для Sheff_88 Найти все сообщения от Sheff_88
  № 3  
Ответить с цитированием
Sheff_88

Регистрация: Dec 2008
Сообщений: 20
А в AS3 есть что-то вроде global в php?
Ну, т.е. прямо внутри класса obj1 пропасать (к примеру) global obj2?

Старый 14.12.2008, 21:07
BlooDHounD вне форума Посмотреть профиль Отправить личное сообщение для BlooDHounD Посетить домашнюю страницу BlooDHounD Найти все сообщения от BlooDHounD
  № 4  
Ответить с цитированием
BlooDHounD
стервочка (я мужик)
 
Аватар для BlooDHounD

блогер
Регистрация: Mar 2004
Адрес: Борисов
Сообщений: 3,161
Записей в блоге: 22
в ООП это называется static.


Последний раз редактировалось BlooDHounD; 14.12.2008 в 21:10.
Старый 14.12.2008, 21:39
Sheff_88 вне форума Посмотреть профиль Отправить личное сообщение для Sheff_88 Найти все сообщения от Sheff_88
  № 5  
Ответить с цитированием
Sheff_88

Регистрация: Dec 2008
Сообщений: 20
т.е., код, к примеру, должен быть таким?:
Код AS3:
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"
 
        } 
 
    } 
 
}
Добавлено через 1 минуту
Бред какой-то получается, т.к. static как раз не позволяет слушать/изменять класс. Для этого они dynamic и объявлены...

Старый 14.12.2008, 21:49
DarkLight вне форума Посмотреть профиль Отправить личное сообщение для DarkLight Посетить домашнюю страницу DarkLight Найти все сообщения от DarkLight
  № 6  
Ответить с цитированием
DarkLight
ветеран форума
 
Аватар для DarkLight

Регистрация: May 2006
Адрес: Москва
Сообщений: 2,978
Отправить сообщение для DarkLight с помощью ICQ Отправить сообщение для DarkLight с помощью Skype™
Что такое у Вас obj2? он нигде не объявлен.
Похоже с ООП в PHP у Вас тоже опыта маловато.
http://php.ru/manual/language.oop5.static.html - читать про static в php
В ас3 оно функционирует так же.
dynamic - дает право на добавление классу свойств/методов на стадии выполнения и в общем случае его использование нежелательно, так как вносит неопределенность относительно наличия/отсутствия у класса функционала и увеличивает количество ошибок.
__________________
4am is time to rock

Старый 14.12.2008, 22:03
Sheff_88 вне форума Посмотреть профиль Отправить личное сообщение для Sheff_88 Найти все сообщения от Sheff_88
  № 7  
Ответить с цитированием
Sheff_88

Регистрация: Dec 2008
Сообщений: 20
obj2 - тоже самое что obj1.
К объекту MovieClip привязан класс. Если он присутствует на первом кадре, дубликат класса автоматом создается? Если да, то с каким именем? С именем объекта MovieClip?

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

Старый 15.12.2008, 00:08
7thsky™ вне форума Посмотреть профиль Отправить личное сообщение для 7thsky™ Найти все сообщения от 7thsky™
  № 8  
Ответить с цитированием
7thsky™
Flash Aксакал
 
Аватар для 7thsky™

Регистрация: Jun 2005
Сообщений: 636
Нда, видать крутой у вас ООП в ПХП был

Класс obj1 - у вас к MovieClip'у ни каким местом не привязан
Дубликат класса

Если как Вы грите что класс obj1 привязан к MovieClip'у - для начала он должен наследоваться от MovieClip, тем самым расширяя базовый класс.
На тему как это в PHP

Есть классы и и экземпляры класса. Если у вас есть какой нить мувик, который лежит сцене, это фактически экземпляр класса (который расширяет базовый класс флэш плеера - flash.display.MovieClip).

Ну и т.д.

О Перечитал, и понял в чем "фишка"
Вы хотите повторить подобную конструкцию во флэше?

PHP код:
<?php

$obj1 
= new ('Some Text');
$obj2 = new ();

echo 
$obj2->testIt ();

class 
{
    
    public 
$name;
    
    function 
__construct ($name) {
        
$this->name $name;
    }
    
}

class 
{
    
    public function 
testIt () {
        global 
$obj1;
        echo 
$obj1->name;
    }
}
?>
Вообще использование в данном контексте global $someVar - это больше хак чем ООП. Самый простой ООП вариант - это использовать например singleton класс, реализующий модель апликации (ну там можно хранить общие для разных компонент данные и прочее), но это тоже...

Во флэше есть понятие документ класс. То есть флэше плеер создает при загрузке swf файла, экземпляр Document Class'а ассоциированный с этим swf файлом. Как задать этот класс - про это тут (на английском).


Последний раз редактировалось 7thsky™; 15.12.2008 в 00:47.
Старый 15.12.2008, 00:46
BlooDHounD вне форума Посмотреть профиль Отправить личное сообщение для BlooDHounD Посетить домашнюю страницу BlooDHounD Найти все сообщения от BlooDHounD
  № 9  
Ответить с цитированием
BlooDHounD
стервочка (я мужик)
 
Аватар для BlooDHounD

блогер
Регистрация: Mar 2004
Адрес: Борисов
Сообщений: 3,161
Записей в блоге: 22
я думал, что в этой строчке:
Код:
trace(obj2.somevar)
идёт обращение к классу obj2, и соответственно свойство somevar должно быть статическим. а тут видимо совсем беда ...

Старый 15.12.2008, 00:57
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 10  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Собственно, применительно к ПХП примеру выше: в АС тоже можно складывать несколько классов в один файл (физически), но есть различия с ПХП / C# и тому подобными... т.е. это можно делать только если:
- существует только одна паблик сущность (т.е. только 1 класс / функция / переменная / неймспейс с модификатором доступа типа public).
- все остальные классы / функции и т.д. объявленные в этом же файле будут автоматически помещены в неймспейс private и доступны только "соседям по файлу".

В данной ситуации global не нужен, т.как все классы объявленные в одном файле будут видны друг другу, но, с перечисленными выше ограничениями.
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 15.12.2008 в 01:01.
Создать новую тему Ответ Часовой пояс GMT +4, время: 02:48.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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