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

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

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

Регистрация: Apr 2008
Сообщений: 80
Записей в блоге: 3
The bomb! класс, унаследованный от MovieClip без библиотеки

Помогите с решением задачи. Перерыл форум, но решения не нашел.
Задача - сделать класс со следующими свойствами:

создание экземпляра:
Код:
myObj = new MyClipClass(data1, data2, ...);
(при этом конструктор создает мувиклип и что-то в нем рисует средствами наподобие lineTo)

свойства (поведение) как у мувиклипа. Например, если у объекта есть поле-мувиклип, то:

Код:
myObj._xscale *= 2;
должно масштабировать сам объект и дочерний мувик.

Такое вообще реализуемо средствами AS2? Я уже двое суток рыскаю по Сети и по форуму, в частности, но решения нигде не нашел.


Последний раз редактировалось Lecosson; 14.07.2008 в 03:52.
Старый 14.07.2008, 03:55
MrPoma вне форума Посмотреть профиль Отправить личное сообщение для MrPoma Посетить домашнюю страницу MrPoma Найти все сообщения от MrPoma
  № 2  
Ответить с цитированием
MrPoma
 
Аватар для MrPoma

Регистрация: Jul 2006
Адрес: Питер
Сообщений: 2,083
Отправить сообщение для MrPoma с помощью Skype™
Код:
class MyMovieClip extends MovieClip {

	function MyMovieClip(){

	};
	
	public static function create(parent:MovieClip, name:String, depth:Number, init:Object):MyMovieClip {
		var mc:MovieClip = parent.createEmptyMovieClip(name, depth);
		var constructor:Function = MyMovieClip;
		mc.__proto__ = constructor.prototype;

		for(var item:String in init){
			mc[item] = init[item];
		};
		constructor.call(mc);
		return MyMovieClip(mc);
	};
};
Юзать:
Код:
var myMc:MyMovieClip = MyMovieClip.create(this, 'mc', 0, {_x:100, _y:100});
__________________
жж | твттр | гглплс | фсбк | вкнткт | гтхб

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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
АС2 - нет, АС3 - да.
Можно инкапсулировать создание клипа так, что createEmptyMovieClip() не будет торчать наружу, и создание будет выглядеть так, как вы хотите, но фактически вы все равно будете вызывать createEmptyMovieClip, просто снаружи это не будет заметно.
Во флеше есть реализация этого, называется UIObject

Есть и другие варианты реализации, не такие тяжеловесные, но принцип более-менее один и тот же.

mrProma:
Код:
constructor.call(mc);
это в чем такое можно скомпилировать? ваащета call и apply не применимы к конструктору...
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 14.07.2008 в 04:02.
Старый 14.07.2008, 04:16
Lecosson вне форума Посмотреть профиль Отправить личное сообщение для Lecosson Найти все сообщения от Lecosson
  № 4  
Ответить с цитированием
Lecosson

Регистрация: Apr 2008
Сообщений: 80
Записей в блоге: 3
Спасибо за ответы, но такое решение я уже находил, и напомню, чего именно хочется добиться:
создание экземпляра: myObj = new MyClipClass(data1, data2, ...);
при этом конструктор создает мувиклип и что-то в нем рисует программными средствами LineTo, etc.
Разумеется, createEmptyMovieClip где-то будет присутствовать. Задача именно в том, чтобы после new нормально отрабатывал конструктор без вызова дополнительных методов (create) из программы. Все нужно спрятать в классе.
В принципе, никаких проблем, но хочется потом иметь не это:
Код:
myObj.clip1._x += 50;
myObj.clip2._x += 50;
а вот это:
Код:
myObj._x += 50;

Старый 14.07.2008, 10:50
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 5  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Цитата:
Сообщение от wvxvw Посмотреть сообщение
это в чем такое можно скомпилировать? ваащета call и apply не применимы к конструктору...
Применимы, особенно, если он указан как Function.

Старый 14.07.2008, 13:10
chingachgoog вне форума Посмотреть профиль Найти все сообщения от chingachgoog
  № 6  
Ответить с цитированием
chingachgoog
Banned
[+4 01.02.09]
[+1 01.02.09]
 
Аватар для chingachgoog

блогер
Регистрация: Nov 2006
Адрес: Moscow
Сообщений: 2,145
Записей в блоге: 7
Цитата:
Сообщение от Lecosson Посмотреть сообщение
хочется потом иметь не это:
Код:
myObj.clip1._x += 50;
myObj.clip2._x += 50;
а вот это:
Код:
myObj._x += 50;
По сути тут несколько проблем:
1) Как отловить ОПРЕДЕЛЕНИЕ нового свойства? (типа мое_свойство="параметры")
Видимо, что без циклической проверки свойств объекта - никак
2) можно отловить конструкцию мое_свойство+="параметр" с помощью __resolve (тут поймается момент когда мое_свойство изначально не определено), но где гарантии, что не воспользуются синтаксисом из п.1?
Да и толку мало, т.к. свойство надо будет как-то транслировать на мувик
3) очень неплохо (любой метод!) можно сделать с помощью __resolve обработчика функции, но тогда придется вызывать нестандартно: типа мое_свойство("параметр"), вместо мое_свойство+="параметр" - как сделать описано в хелпе.
4) Самый правильный и самый нудный вариант - добавить геттер/сеттер обработчики к объекту (addProperty или set/get).

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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
__etc:
фз... у мну компилятор упорно не соглашается назвать переменную конструктором =) говорит, что не стоит такое имя использовать =)
Lecosson:
Ну, а если эту переменную назвать как-нибудь по-другому, то пример MrProma вполне рабочий, и делает то, что вам надо.

Если так уж позарез не хочется вызывать статический create:
Ну, видится такой вариант реализации:
Вы не создаете в вашем приложении других клипов, а только наследники такого класса + создаете класс-копозит, у которого будут методы addChild() и removeChild(), тогда эти методы смогут добавить на сцены хоть строку, а не только экземпляр какого-нибудь класса =)
* т.е. ссвоего рода договоренность: если я передаю ClipContainer.addChild([class Clip]) то он создает пустой клип в своем .parent и передает Clip в его .thisClip ссылку на вновь созданый клип. Единственное, что подменить ссылки из других мест на этото только что созданый клип все равно не получится, так что Clip будет должен транслировать все мувиклипные свойства через свои свойства тому клипу, который ClipContainer создал.
Но опять же, это куча соглашений с самим собой, и не надежно, потому что как только вы захотите использовать какие-то классы не из вашего проекта - вся эта схема может порушиться. + куча дополнительных методов, просто ради красивостей.
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 14.07.2008 в 15:12.
Старый 14.07.2008, 16:06
Alex_beginner вне форума Посмотреть профиль Отправить личное сообщение для Alex_beginner Найти все сообщения от Alex_beginner
  № 8  
Ответить с цитированием
Alex_beginner
 
Аватар для Alex_beginner

Регистрация: May 2008
Сообщений: 476
Господа! Может быть кто-нибудь приведет готовый код полноценного подкласса MovieClip, экземпляр которого создается не через статический метод create, а через использование оператора new - тема довольно актуальная, на мой взгляд.
Я понимаю, что в оффициальной литературе указывают на то, что создать такой подкласс без связывания его с символом невозможно, вернее возможно, но это будет не полноценный визуальный подкласс.
__________________
Случайность, господа, это знаете ли непознанная необходимость.

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

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

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

Регистрация: May 2008
Сообщений: 476
Цитата:
В ас2 создание мувиклипа через статичным метод, является единственно верным решением.
Хорошо. А как дело обстоит с АС1? Может быть есть обходные пути?
__________________
Случайность, господа, это знаете ли непознанная необходимость.


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

Теги
class , movieclip
Опции темы
Опции просмотра

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

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


 


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


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