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

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

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

Регистрация: Apr 2008
Сообщений: 82
По умолчанию Вложенность классов от MovieClip

В основном мувике есть такой код.
Код:
var bgr: Background = Background.Create(this, "back", 0, {});
bgr.fill();
Он создаёт и рисует некоторый объект. Всё работает тут.
Теперь я его (эти строки) помещаю в конструктор некоторого класса Viewer, который сам будет создаваться в основном мувике таким же способом.
Код:
var vwr: Viewer = Background.Create(this, "viewer", 0, {});
...
public function Viewer() {         // код класса Viewer
  super();
  var bgr: Background = Background.Create(this, "back", 0, {});
  bgr.fill();
}
В результате ничего не рисуется. Я вижу, что все параметры инициализации передаются верно, но визуально ничего не происходит.

Старый 05.06.2008, 02:04
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 2  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Класс Viewer от чего наследуется?
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 05.06.2008, 09:15
Ruffus вне форума Посмотреть профиль Отправить личное сообщение для Ruffus Найти все сообщения от Ruffus
  № 3  
Ответить с цитированием
Ruffus
 
Аватар для Ruffus

Регистрация: Apr 2008
Сообщений: 82
От MovieClip наследуются все классы

Старый 05.06.2008, 11:37
Волгоградец вне форума Посмотреть профиль Отправить личное сообщение для Волгоградец Найти все сообщения от Волгоградец
  № 4  
Ответить с цитированием
Волгоградец
 
Аватар для Волгоградец

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
Непонятно - а почему нет слова new при создании экземпляра. А вообще у класса MovieClip нет такого свойства Background.Create (), поэтому строчка
Код:
var vwr: Viewer = Background.Create(this, "viewer", 0, {});
не должна работать. Надо от класса Background наследоваться.

Старый 05.06.2008, 11:49
Сайлас вне форума Посмотреть профиль Отправить личное сообщение для Сайлас Найти все сообщения от Сайлас
  № 5  
Ответить с цитированием
Сайлас

Регистрация: Mar 2008
Сообщений: 259
Может потому что это статик метод?

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

Регистрация: May 2008
Сообщений: 476
Потому, что Ruffus программирует еще и на Дельфи!!!!!!!
А если серьезно, то похоже Create и есть статический метод.
__________________
Случайность, господа, это знаете ли непознанная необходимость.


Последний раз редактировалось Alex_beginner; 05.06.2008 в 11:53.
Старый 05.06.2008, 12:32
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 7  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
Цитата:
Сообщение от Ruffus Посмотреть сообщение
В основном мувике есть такой код.
Код:
var bgr: Background = Background.Create(this, "back", 0, {});
bgr.fill();
Он создаёт и рисует некоторый объект. Всё работает тут.
Теперь я его (эти строки) помещаю в конструктор некоторого класса Viewer, который сам будет создаваться в основном мувике таким же способом.
Код:
var vwr: Viewer = Background.Create(this, "viewer", 0, {});
...
public function Viewer() {         // код класса Viewer
  super();
  var bgr: Background = Background.Create(this, "back", 0, {});
  bgr.fill();
}
В результате ничего не рисуется. Я вижу, что все параметры инициализации передаются верно, но визуально ничего не происходит.
да как бы и не должно ничего визуально происходить во втором случае

чтобы точно сказать, нужно знать что делает Background.Create
по-видимому создает в мувике, переданном в первом параметре, пустой мувик и перенаправляет его __proto__ на Background.prototype..

в коде на линейке ты передаешь как this реальный мувик и все получается..
а в коде в классе как this ты передаешь объект, хоть и унаследованный от MovieClip, но не имеющий дисплейного воплощения, т.е. ничего увидеть и не должен..

Старый 05.06.2008, 14:04
Ruffus вне форума Посмотреть профиль Отправить личное сообщение для Ruffus Найти все сообщения от Ruffus
  № 8  
Ответить с цитированием
Ruffus
 
Аватар для Ruffus

Регистрация: Apr 2008
Сообщений: 82
Код:
public static function Create(this_movclip:MovieClip, name:String, depth:Number, init_obj:Object):Background
	{
		var out_movclip:MovieClip = this_movclip.createEmptyMovieClip(name, depth);
		var current_constructor:Function = Background;
		out_movclip.__proto__ = current_constructor.prototype;
		for (var i in init_obj)
		{
			out_movclip[i] = init_obj[i];
		}
		current_constructor.call(out_movclip);
		return Background(out_movclip);
	}
Эту идею мне подсклазали на этом форуме.

Похоже, что silin прав чуть более, чем полностью.
Как быть тогда?

Я кстати с трудом понимаю, что делает строка
Код:
out_movclip.__proto__ = current_constructor.prototype;
Пробую в Background.Create передавать _root.
Не помогает.


Последний раз редактировалось iNils; 05.06.2008 в 15:52.
Старый 05.06.2008, 14:24
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 9  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
не очень понятна логика: почему и vwr и bgr в нем ты создаешь с помощью Background.Create..
при этом vwr объявляешь как Viewer..
конструктор Viewer ни разу не исполняется (косяк еще и в этом)

если уж задумано так создавать мувики, то и Viewer должен иметь аналогичный метод Create, возвращающий экземпляр Viewer , тогда
var vwr: Viewer = Viewer.Create(this, "viewer", 0, {});
сработает (в том смысле что и конструктор будет вызван и на момент вызова конструктора экземпляр уже будет на сцене)

PS я в свое время отказался от такого способа в пользу универсальной приспособы для создания мувиков "своего" класса, суть там та же, но все гораздо прозрачнее получается


Последний раз редактировалось silin; 05.06.2008 в 14:31.
Старый 05.06.2008, 15:56
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 10  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Ruffus, надо использовать кнопку , а не создавать несколько сообщений подряд.

В ActionScript принято с большой буквы писать только имена классов и интерфейсов, все методы и свойства пишут с маленькой. Поэтому вместо Background.Create правильнее писать Background.create

Покажите код классов Background и Viewer полностью.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Создать новую тему Ответ Часовой пояс GMT +4, время: 23:46.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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