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

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

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

блогер
Регистрация: Nov 2007
Адрес: Киев
Сообщений: 557
Записей в блоге: 2
По умолчанию Классы, наследующие MovieClip

У меня давно вот есть тпроблемма. И решение есть, но оно мне перестало нравиться.
Вобщем - создаю класс, который наследует МувиКлип. Не суть важно, но допустим - нужно просто в любом месте создать мувик, в котором должен отрисоваться прямоугольник с заданными шириной, высотой, цветом:

Код:
class ColorRectangle extends MovieClip{
	private var _w:Number;
	private var _h:Number;
	private var _linecolor:Number;
	private var _color:Number;
	public function ColorRectangle(){
		this._linecolor=0;
		this._color=Math.floor(Math.random()*0xffffff+1);
		this._w=10;
		this._h=10;
	}
	public function init(w,h,color,linecolor){
		this._w=(!isNaN(w))?w:this._w;
		this._h=(!isNaN(h))?h:this._h;
		this._color=(!isNaN(color))?color:this._color;
		this._linecolor=(!isNaN(linecolor))?linecolor:this._linecolor;
	}
	public function Draw(){
		this.clearIt();
		this.lineStyle(1,this._linecolor,100);
		this.beginFill(this._color,100);
		this.moveTo(0,0);
		this.lineTo(this._w,0);
		this.lineTo(this._w,this._h);
		this.lineTo(0,this._h);
		this.lineTo(0,0);
		this.endFill();
	}
	public function clearIt(){
		this.clear();
	}
}
Все просто, но я не знаю, как правильно создать объект этого класса, который будет отображаться на сцене. Я вышел из ситуации, написав классу статический метод "createFromMC":

Код:
	public static function createFromMC(mc:MovieClip) {
		var inst:Object = new ColorRectangle(mc);
		for (var i in inst) {
			mc[i] = inst[i];
		}
		mc.constructor = inst.constructor;
		mc.__proto__ = inst.__proto__;
		return mc;
	}
Теперь достаточно написать
Код:
import ColorRectangle;
var mc=_root.createEmptyMovieClip(name,depth);
var crect=ColorRectangle.createFromMC(mc);
И у нас будет объект, с которым можно работать.

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


Последний раз редактировалось crazyone; 01.02.2008 в 18:52.
Старый 03.02.2008, 09:42
manah вне форума Посмотреть профиль Отправить личное сообщение для manah Найти все сообщения от manah
  № 2  
Ответить с цитированием
manah
 
Аватар для manah

Регистрация: Apr 2006
Сообщений: 29
слушай у тебя в конструкторе "ColorRectangle()" параметров нет, зачем ты положил туда "mc" (new ColorRectangle(mc))?

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

блогер
Регистрация: Nov 2007
Адрес: Киев
Сообщений: 557
Записей в блоге: 2
Цитата:
Сообщение от manah
слушай у тебя в конструкторе "ColorRectangle()" параметров нет, зачем ты положил туда "mc" (new ColorRectangle(mc))?
А. Эм. Ну это как универсальный метод. По привычке всунул. Если в конструкторе нужно в этом мувике что-то создать - то нужна ссылка на мувик.

Цитата:
а вы и так не используете. экземпляр ведь программно создается.
код, который вы скопипастили - лучший вариант
Просто не нравится он мне. Как-то через задницу. Вдруг есть что-то более нормальное...

Цитата:
Использовать композицию, например.
Ну... Композиция и наследование - все же разные вещи. Но наверное таки надо будет пересмотреть свои взгляды на то - что же лучше.

Старый 03.02.2008, 10:32
MrPoma вне форума Посмотреть профиль Отправить личное сообщение для MrPoma Посетить домашнюю страницу MrPoma Найти все сообщения от MrPoma
  № 4  
Ответить с цитированием
MrPoma
 
Аватар для MrPoma

Регистрация: Jul 2006
Адрес: Питер
Сообщений: 2,083
Отправить сообщение для MrPoma с помощью Skype™
Цитата:
Сообщение от crazyone
Внимание - вопрос: "Нет ли более нормального способа создать объект класса, который наследуется от мувиклипа, не используя символы библиотеки?"
а вы и так не используете. экземпляр ведь программно создается.
код, который вы скопипастили - лучший вариант

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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Ничего не понимаю... %) А зачам нужен этот статический метод? =)
Если класс должен быть привязан к символу в библиотеке, то проще всего его создать используя attachMovie(), если нет, то передать конструктору ссылку на клип, где нужно создать объект класса.

ЗЫ. Покажите пример использования... а то чего-то ничего в голову не приходит =)
__________________
Hell is the possibility of sanity

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

Регистрация: Sep 2002
Сообщений: 30,784
Цитата:
Сообщение от crazyone
Внимание - вопрос: "Нет ли более нормального способа создать объект класса, который наследуется от мувиклипа, не используя символы библиотеки?"
Использовать композицию, например.

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

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

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


 


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


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