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

Вернуться   Форум Flasher.ru > Блоги > As3 изучение и немного As2

Оценить эту запись

Custom MovieClip

Запись от in4core размещена 08.12.2011 в 02:10
Обновил(-а) in4core 09.12.2011 в 19:03

Alpha 1.02
Код AS3:
package com.in4core.display 
{
	import flash.display.DisplayObject;
	import flash.display.Sprite;
	import flash.errors.IllegalOperationError;
	import flash.events.Event;
	import flash.events.TimerEvent;
	import flash.utils.Timer;
	/**
	 * ...
	 * @author in4core
	 * Custom programmatic MovieClip class.
	 * Licensed under the MIT License
	 * 
	 * v.1.02 ChangeLog :
	 * 		
	 * 		1. User frameRate for every MRIP
	 * 		2. More Overriden 
	 * 		3. sets or get frameRate runTime
	 * 		4. gotoAndPlay method now accept label or frameNum
	 * 		5. Added new method *addAnimatedSequence(sequence:Array of DO)*
	 *      6. Added new method *searchChildInFrames(d:DisplayObject):DisplayObject*
	 *      7. getFrameByNumber moved to private
	 *      8. Added new methods *clearFrame(frame:*) , clearAllFrames()*
	 *      9. 7 moved in getFrameFrom(frame:*):Sprite
	 *      10. Added new method setFrameAlpha/getFrameAlpha
	 *      
	 */
	public class AdvancedMovieClip extends Sprite implements IAdvancedMovieClip
	{
 
		private var _vFrames:Vector.<Frame> = new Vector.<Frame>();
		private var _curFrame:uint 			= 0;
		private var _isplayFirst:Boolean	= true;
		private var _timer:Timer			= new Timer(0);
 
		/////////////////////////////////////////////////////////////////////
		//!4
		//!  4                        CONSTRUCTOR
		//!    4                                                           
		/////////////////////////////////////////////////////////////////////
 
		public function AdvancedMovieClip(frames:uint = 5 , frameRate:int = 30) {
 
			super();
 
			_timer.delay = 1000 / frameRate;
			_timer.addEventListener(TimerEvent.TIMER , onFrame);
 
			if (!frames) throw new IllegalOperationError(' even sprite has 1 frame ');
 
			for (var i:uint = 0; i < frames; i++) this._vFrames.push ( new Frame('' , i) );
 
			_fillContainer();
		}
 
		/////////////////////////////////////////////////////////////////////
		//!4
		//!  4                        PUBLIC ( IAdvancedMovieClip )
		//!    4                                                           
		/////////////////////////////////////////////////////////////////////
 
		public function addFrames(amount:uint):uint {
 
			for (var i:int = 0; i < amount; i++) {
 
				const frame:Frame = new Frame('' , _vFrames.length - 1);
 
				this._vFrames.push ( frame );
				super.addChild ( frame );
			}
 
			return this.framesCount;
		}
 
		public function get framesCount():uint {
 
			return this._vFrames.length;
		}
 
		public function setFrameLabel(label:String , frame:uint):void {
 
			if (frame > this._vFrames.length - 1 ) return;
 
			this._vFrames[frame].label = label;
		}
 
		public function addChildInFrame(frameNum:uint , child:DisplayObject):DisplayObject {
 
			return this._vFrames[frameNum].addChild(child);
		}
 
		public function addAnimatedSequence(sequence:Array/*of DO*/):uint {
 
			if (sequence.length > _vFrames.length) addFrames( sequence.length - _vFrames.length);
 
			for (var i:int = 0; i < framesCount; i++) {
 
				if (! (sequence[i] is DisplayObject) ) throw new IllegalOperationError('sequence can accept only DO array'); 
 
				_vFrames[i].addChild(sequence[i]);
			}
 
			return framesCount;
		}
 
		public function searchChildInFrames(d:DisplayObject):DisplayObject {
 
			for (var i:int = 0; i < framesCount; i++) {
 
				var frame:Frame = _vFrames[i] as Frame;
 
				for (var j:int = 0; j < frame.numChildren; j++) {
 
					if ( frame.getChildAt(j) == d ) return frame.getChildAt(j);
				}
			}
 
			return null;
		}
 
		public function clearFrame(frame:*/*uint or string if label*/):void {
 
			var $frame:Frame;
 
			if (frame is Number) { 
 
				$frame = getFrameByNumber(frame);
				if ($frame) while ($frame.numChildren) $frame.removeChildAt(0);
			}
 
			else if (frame is String) {
 
				$frame = getFrameByLabel(frame);
				if ($frame) while ($frame.numChildren) $frame.removeChildAt(0);
			}
		}
 
		public function clearAllFrames():void {
 
			for (var i:int = 0; i < framesCount; i++) {
 
				var frame:Frame = _vFrames[i] as Frame;
 
				while (frame.numChildren) frame.removeChildAt(0);
			}
		}
 
		public function getFrameFrom(frame:*/*uint or string if label*/):Sprite {
 
			var $frame:Frame;
 
			if (frame is Number) { 
 
				$frame = getFrameByNumber(frame);
				if ($frame) return $frame as Sprite;
			}
 
			else if (frame is String) {
 
				$frame = getFrameByLabel(frame);
				if ($frame) return $frame as Sprite;
			}
 
			return null;
		}
 
		public function setFrameAlpha(n:Number , frame:uint):void {
 
			var $frame:Frame = getFrameByNumber(frame);
			if ($frame) $frame.alpha = n;
		}
 
		public function getFrameAlpha(frame:uint):Number {
 
			var $frame:Frame = getFrameByNumber(frame);
			if ($frame) return $frame.alpha;
			return -1;
		}
 
		public function set frameRate(rate:int):void {
 
			_timer.stop();
			_timer.delay = 1000 / rate;
			_timer.start();
		}
 
		public function get frameRate():int {
 
			return _timer.delay;
		}
		/////////////////////////////////////////////////////////////////////
		//!4
		//!  4                        OVERRIDEN
		//!    4                                                           
		/////////////////////////////////////////////////////////////////////
 
		override public function addChild(child:DisplayObject):DisplayObject 
		{
			return this._vFrames[_curFrame].addChild(child);
		}
		override public function addChildAt(child:DisplayObject, index:int):DisplayObject 
		{
			return this._vFrames[_curFrame].addChildAt(child, index);
		}
		override public function removeChild(child:DisplayObject):DisplayObject 
		{
			return this._vFrames[_curFrame].removeChild(child);
		}
		override public function removeChildAt(index:int):DisplayObject 
		{
			return this._vFrames[_curFrame].removeChildAt(index);
		}
		override public function getChildByName(name:String):DisplayObject 
		{
			return this._vFrames[_curFrame].getChildByName(name);
		}
		override public function getChildIndex(child:DisplayObject):int 
		{
			return this._vFrames[_curFrame].getChildIndex(child);
		}
		/////////////////////////////////////////////////////////////////////
		//!4
		//!  4                        PUBLIC PLAYER
		//!    4                                                           
		/////////////////////////////////////////////////////////////////////
 
		public function get isPlaying():Boolean {
 
			return _timer.running;
		}
 
		public function gotoAndStop(frame:*/*uint or string if label*/):void {
 
			stop();
 
			if(frame is Number) {
 
				if (frame >= _vFrames.length) return;
 
				this._vFrames[_curFrame].visible = false;
				this._vFrames[frame].visible = true;
				this._curFrame = frame;
			}
 
			else if (frame is String) {
 
				var $frame:Frame = getFrameByLabel(frame);
				if ($frame) {
 
					this._vFrames[_curFrame].visible = false;
					this._curFrame = $frame.number;
					this._vFrames[_curFrame].visible = true;
				}
			}
		}
 
		public function gotoAndPlay(frame:*/*uint or string if label*/):void {
 
			stop();
 
			if(frame is Number) {
 
				this._vFrames[_curFrame].visible = false;
				this._vFrames[frame].visible = true;
 
				if (frame >= _vFrames.length) this._curFrame = 0;
				else this._curFrame = frame;
 
			}
 
			else if (frame is String) {
 
				gotoAndStop(frame);
			}
 
			play();
		}
 
		public function nextFrame():void {
 
			this._curFrame++;
 
			try {
 
				this._vFrames[_curFrame].visible = true;
				this._vFrames[_curFrame - 1].visible = false;
			}
			catch (e:Error) {
 
				this._curFrame--;
			}
		}
 
		public function prevFrame():void {
 
			this._curFrame--;
 
			try {
 
				this._vFrames[_curFrame].visible = true;
				this._vFrames[_curFrame + 1].visible = false;
			}
			catch (e:Error) {
 
				this._curFrame++;
			}
		}
 
		public function play():void {
 
			if (this._vFrames.length > 1) this._timer.start();
		}
 
		public function stop():void {
 
			this._timer.reset();
		}
 
		/////////////////////////////////////////////////////////////////////
		//!4
		//!  4                        PRIVATE
		//!    4                                                           
		/////////////////////////////////////////////////////////////////////
 
		private function _resortFrames():void {
 
			for (var i:uint = 0; i < _vFrames.length; i++) _vFrames[i].number = i;
		}
 
		private function _clearContainer():void {
 
			while (super.numChildren) super.removeChildAt(0);
		}
 
		private function _fillContainer():void {
 
			for (var i:uint = 0; i < this._vFrames.length; i++) {
 
				super.addChild (_vFrames[i]);
				this._vFrames[i].visible = false;
				this._vFrames[_curFrame].visible = true;
			}
		}
 
		private function getFrameByLabel(label:String):Frame {
 
			for (var i:int = 0; i < this._vFrames.length; i++) {
 
				if (this._vFrames[i].label == label) return this._vFrames[i];
			}
 
			return null;
		}
 
		private function onFrame(e:TimerEvent):void {
 
			if (this._curFrame < this._vFrames.length - 1) nextFrame();
 
			else {
 
				this._vFrames[_curFrame].visible = false;
				this._vFrames[0].visible = true;
				this._curFrame = 0;
			}
		}
 
		private function getFrameByNumber(num:uint):Frame {
 
			for (var i:int = 0; i < this.framesCount; i++) {
 
				if (this._vFrames[i].number == num) return this._vFrames[i];
			}
 
			return null;
		}
	}
}
 
/////////////////////////////////////////////////////////////////////
//!4
//!  4                        FRAME DEFINITION
//!    4                                                           
/////////////////////////////////////////////////////////////////////
import flash.display.Sprite;
 
internal class Frame extends Sprite {
 
	private var _label:String = '';
	private var _number:uint = 0;
 
	public function Frame(l:String = '' , n:uint = 0) {
 
		super();
		this.label = l;
		this.number = n;
		this.visible = false;
	}
 
	public function get label():String 
	{
		return _label;
	}
 
	public function set label(value:String):void 
	{
		_label = value;
	}
 
	public function get number():uint 
	{
		return _number;
	}
 
	public function set number(value:uint):void 
	{
		_number = value;
	}
}
Код AS3:
package com.in4core.display 
{
	import flash.display.DisplayObject;
	import flash.display.Sprite;
 
	/**
	 * ...
	 * @author in4core
	 */
	public interface IAdvancedMovieClip 
	{
		function addFrames(amount:uint):uint;
 
		function setFrameLabel(label:String , frame:uint):void;
		function addChildInFrame(frameNum:uint , child:DisplayObject):DisplayObject;
		function addAnimatedSequence(sequence:Array/*of DO*/):uint;
		function searchChildInFrames(d:DisplayObject):DisplayObject;
		function clearFrame(frame:*/*uint or string if label*/):void;
		function clearAllFrames():void;
		function getFrameFrom(frame:*/*uint or string if label*/):Sprite;
		function setFrameAlpha(n:Number , frame:uint):void
		function getFrameAlpha(frame:uint):Number;
 
		function set frameRate(rate:int):void;
		function get frameRate():int;
		function get framesCount():uint;
		function get isPlaying():Boolean;
 
		function addChild(child:DisplayObject):DisplayObject;
		function addChildAt(child:DisplayObject, index:int):DisplayObject;
		function removeChild(child:DisplayObject):DisplayObject;
		function removeChildAt(index:int):DisplayObject;
		function getChildByName(name:String):DisplayObject;
		function getChildIndex(child:DisplayObject):int;
 
		function gotoAndStop(frame:*/*uint or string if label*/):void;
		function gotoAndPlay(frame:*/*uint or string if label*/):void;
		function nextFrame():void;
		function prevFrame():void;
		function play():void;
		function stop():void;
	}
 
}
P.s есть небольшое различие в том, что кадры все таки считаются как в любом нормальном редакторе с 0.
Всего комментариев 50

Комментарии

Старый 08.12.2011 02:14 GBee вне форума
GBee
 
Аватар для GBee
Практическое применение? Или просто разработка для себя? Зачем? Разве что из интереса.
Старый 08.12.2011 02:59 incvizitor вне форума
incvizitor
 
Аватар для incvizitor
RIP?
1 - Еще бы addFrameScript не помешал бы.
2 - numChildren мувиклипа вернет только тех "детей", что лежат в кадре.
3 - под конец onFrame не плохо было бы диспатчнуть FRAME_CONSTRUCTED.
Старый 08.12.2011 08:18 BuKT вне форума
BuKT
 
Аватар для BuKT
Цитата:
Зачем?
Исследовательская работа же. +100500 к скиллу понимания внутренних процессов.
Очень интересно будет посмотреть аналогичное для Sprite
Старый 08.12.2011 10:09 КорДум вне форума
КорДум
 
Аватар для КорДум
По идее, эта штука не нативная и будет работать в разы медленнее.
У тов. etc, насколько помню, создается самый настоящий MovieClip через какие-то там хитрые операции с байтами. Это не упрек, просто для справки )
Старый 08.12.2011 12:22 Hidest вне форума
Hidest
 
Аватар для Hidest
Для самообразование неплохо, думаю (хотя, признаться, в код не вникал). А почему gotoAndStop() позволяет перейти на лейбл, а gotoAndPlay() - нет, судя по интерфейсу? Какая-то дискриминация
Старый 08.12.2011 12:28 gloomyBrain вне форума
gloomyBrain
 
Аватар для gloomyBrain
Еще интересно, зачем тут интерфейс? Я бы расширил обычный flash.display.MovieClip и заоверрайдил все нужные методы. Дабы была полная взаимозаменяемость
Старый 08.12.2011 14:25 GBee вне форума
GBee
 
Аватар для GBee
Да про интерфейс тоже хотел узнать. Было бы неплохо сделать мувик фреймрейтонезависимым от основной сцены.
Старый 08.12.2011 14:45 in4core вне форума
in4core
 
Аватар для in4core
incvizitor - все верно говоришь, но
Цитата:
Первая альфа версия, позже нагружу железом.
- как раз и означает, что потом буду добавлять всякие типа frameScript и еще новые фичи не заявленные в мс.

Интрефейс здесь просто чисто для того, чтобы видеть какие методы есть, впринципе названия методов говорят за себя ( вообщем чтобы в главном не копаться ).

КорДум - все верно, работать будет медленнее, но не особо сильно. Скрытие по visible показало что это наилучший результат из всех возможныъх по тайм тесту.

Hidest - замечание принято, не досмотрел. Добавим.

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

gloomyBrain - да можно почему нет, просто 90% свойств есть и у спрайта, а все нужные типа gotoAndPlay я уже и так добавил
Старый 08.12.2011 15:15 incvizitor вне форума
incvizitor
 
Аватар для incvizitor
Цитата:
gloomyBrain - да можно почему нет, просто 90% свойств есть и у спрайта, а все нужные типа gotoAndPlay я уже и так добавил
Проблема в том что вы никогда не передадите этот объект в метод, который принимает MovieClip. А это не есть хорошо.

Еще одна вещь. Если вы добавите ребенка в мувикли, то его будет видно во всех кадрах клипа. С ремувЧайлд то же не ясно. После того как мы сделаем addChild(foo), мы ожидаем что можно сделать removeChild(foo). В случае же Вашего класса вылетит RTE.

Вывод: поделайте по больше экспериментов с мувиклипом и Вашим классом и сравните результаты, это наведет Вас на определенные мысли.
Старый 08.12.2011 15:43 in4core вне форума
in4core
 
Аватар для in4core
Цитата:
Проблема в том что вы никогда не передадите этот объект в метод, который принимает MovieClip. А это не есть хорошо.
Собственно а зачем? Сам класс создавался в рассчете , что у вас нет IDE и вы пишете только например в FD, соотв стандартные мувиклипы созданные в FD от спрайтов отличаться не будут. Поэтому и передавать его не надо.
Цитата:
Если вы добавите ребенка в мувикли, то его будет видно во всех кадрах клипа
А вы это проверяли? Помоему ошибаетесь - ребенок добавляется на кадр в котором стоит ползунок. Насчет removeChild не досмотрел. доделаем +.
Старый 08.12.2011 16:18 gloomyBrain вне форума
gloomyBrain
 
Аватар для gloomyBrain
Цитата:
Собственно а зачем? Сам класс создавался в рассчете , что у вас нет IDE и вы пишете только например в FD, соотв стандартные мувиклипы созданные в FD от спрайтов отличаться не будут. Поэтому и передавать его не надо.
Ну да. У меня FlashDevelop, поэтому я не передаю параметры в функции. "...а мозги - есть?" (с) Slando
Старый 08.12.2011 16:22 incvizitor вне форума
incvizitor
 
Аватар для incvizitor
А если есть какойнить внешний хендлер анимации? Получается надо для RIP и для MovieClip отдельные писать.

Цитата:
А вы это проверяли? Помоему ошибаетесь - ребенок добавляется на кадр в котором стоит ползунок.
Ну конечно же проверял.
Старый 08.12.2011 16:38 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
Цитата:
Собственно а зачем? Сам класс создавался в рассчете , что у вас нет IDE и вы пишете только например в FD, соотв стандартные мувиклипы созданные в FD от спрайтов отличаться не будут. Поэтому и передавать его не надо.
Покажите мне хоть одного вменяемого флешера, у которого нету Flash IDE?

Такие штуки делаются для сбора мувиклипа в рантайме.
Старый 08.12.2011 16:47 TanaTiX вне форума
TanaTiX
 
Аватар для TanaTiX
Psycho Tiger, если предположить, что использование лицензионного IDE слишком накладно, а работать с мувиками как-то надо... Но это все конечно за уши притянуто.
Старый 08.12.2011 18:06 dark256 вне форума
dark256
 
Аватар для dark256
..... графомания какая-то...
Старый 09.12.2011 01:32 ~~~ вне форума
~~~
 
Аватар для ~~~
Цитата:
Psycho Tiger: Покажите мне хоть одного вменяемого флешера, у которого нету Flash IDE?
Ну есть тут. И чо?
Старый 09.12.2011 01:56 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
Сочувствую.
Купите, наконец.
Старый 09.12.2011 14:46 Котяра вне форума
Котяра
 
Аватар для Котяра
У меня тоже нет..
А вообще я бы обязательно добавил к этому классу возможность устанавливать свой frameRate.
Очень не хватает этого в обычных мувиклипах.
Т.е. анимацию делать не по энтерфрэйм а по таймеру.
(см. AnimatedBitmap)
Старый 09.12.2011 15:36 in4core вне форума
in4core
 
Аватар для in4core
Котяра я об этом думал изначально, но что то все говорят что таймер хужевато чем фрейм, поэтому стал его использовать. Окей сделаю по таймеру. Еще планируется метод как раз под animatedBitmap тоесть :
movie.setBitmapClip(bitmaps:Array/* array of DO*/) чтобы сразу сунуть все картинки и анимация уже была готова. Собственно только из за этого метода и возник класс ) Но пока выложил тока альфу
Старый 09.12.2011 17:46 Котяра вне форума
Котяра
 
Аватар для Котяра
Называй классы понятно - MovieRIP - это вообще беспредел какой-то
Обзови просто ProgrammingMovieClip или CustomMovieClip, наконец.
Старый 09.12.2011 18:48 in4core вне форума
in4core
 
Аватар для in4core
Почемуж беспредел? ) хоязин барин)) Ну вообще конечно можно и получше назвать.. подумаю
Старый 09.12.2011 18:55 GBee вне форума
GBee
 
Аватар для GBee
Как вы яхту назовете...
Старый 09.12.2011 19:00 in4core вне форума
in4core
 
Аватар для in4core
Так скажем это выражение применимо не совсем везде. ))
Старый 09.12.2011 19:04 in4core вне форума
in4core
 
Аватар для in4core
Обновлено до версии 1.02 лог изменений в хидере
Старый 09.12.2011 19:05 in4core вне форума
in4core
 
Аватар для in4core
Test
Код AS3:
movie = new AdvancedMovieClip(3,3);
 
			addChild(movie);
 
			var s:Shape = new Shape();
			s.graphics.beginFill(0);
			s.graphics.drawRect(0, 0, 100, 100);
 
			var s1:Shape = new Shape();
			s1.graphics.beginFill(0xFF0000);
			s1.graphics.drawCircle(0, 0, 30);
 
			var s2:Shape = new Shape();
			s2.graphics.beginFill(0xFFFF00);
			s2.graphics.drawRect(0, 0, 100, 100);
 
			movie.addAnimatedSequence([s, s1, s2]);
 
			movie.frameRate = 10;
 
			movie.gotoAndPlay(2);
Старый 09.12.2011 23:04 smithy вне форума
smithy
@Котяра
Цитата:
Т.е. анимацию делать не по энтерфрэйм а по таймеру.
Разве имеет смысл делать это по таймеру? Ваш мувик не будет отрисовываться чаще чем частота кадров флешки. Значит достаточно по энтерфрейму вычислять номер кадра, который сейчас надо показать.
Старый 09.12.2011 23:20 GBee вне форума
GBee
 
Аватар для GBee
Цитата:
Значит достаточно по энтерфрейму вычислять номер кадра, который сейчас надо показать.
Тоже подумал об этом, получается movieRate/stageRate, то есть если зададим 60 кадров при стейджевых 30, - 2 кадра в кадре. А если 15? 0.5 кадра, то есть floorить надо и на протяжении 2 кадров стеджа показывать один мувика - круто!
Старый 09.12.2011 23:25 in4core вне форума
in4core
 
Аватар для in4core
Ребят Котяра прав на самом деле. Вы рассматриваете не тривиальные случаи. Тут разговор может стоять например рейт=30 , а скорость мувика 20 или 15. в зависимости от нужности. Да пускай будет таймер, я думаю так масштабней все же. Нужны 30 кадров - задали 30 кадров и не паримся.
Старый 09.12.2011 23:35 GBee вне форума
GBee
 
Аватар для GBee
Ну и coeff = 20/30 = 0.6666;
movieCurrentFrame = Math.floor(stageCurrentFrame * coeff);
Старый 12.12.2011 17:59 etc вне форума
etc
 
Аватар для etc
getFrameByNumber фееричненький метод.
Старый 12.12.2011 18:19 smithy вне форума
smithy
я бы заменил метод
Код AS3:
public function searchChildInFrames(d:DisplayObject):DisplayObject {
 
			for (var i:int = 0; i < framesCount; i++) {
 
				var frame:Frame = _vFrames[i] as Frame;
 
				for (var j:int = 0; j < frame.numChildren; j++) {
 
					if ( frame.getChildAt(j) == d ) return frame.getChildAt(j);
				}
			}
 
			return null;
		}
на
Код AS3:
public function searchChildInFrames(d:DisplayObject):DisplayObject {
	return d;
}
Старый 12.12.2011 20:26 in4core вне форума
in4core
 
Аватар для in4core
smithy - у меня CustomMC ане просто mc - чайлды тока в кадрах, тоесть в отдельных спрайтах, и чтобы до них долезть надо серчить в каждом из них.
Старый 12.12.2011 21:14 crazyone вне форума
crazyone
 
Аватар для crazyone
Так а что возвращает метод searchChildInFrames? Для чего его использовать?
Если объект является прямым чайлдом одного из кадров - вернуть объект, а если нет - null?
Чем не угодил метод contains, или на худой конец - свойство parent?

Фееричность на фееричности.
Старый 12.12.2011 21:26 dimarik вне форума
dimarik
 
Аватар для dimarik
Господа, ничего не понимаю (летчик.jpg).
Раз уж автор не соизволил, то кто мне вкратце объяснит, что это за RIP?
Старый 12.12.2011 21:31 alatar вне форума
alatar
 
Аватар для alatar
Rest In Peace?
Старый 12.12.2011 21:51 dimarik вне форума
dimarik
 
Аватар для dimarik
Я не в курсе, чем балуются отдельные товарищи, но фразы типа

Цитата:
А если есть какойнить внешний хендлер анимации? Получается надо для RIP и для MovieClip отдельные писать.
настораживают.
Старый 12.12.2011 22:20 incvizitor вне форума
incvizitor
 
Аватар для incvizitor
@ dimarik, а что же Вас беспокоит в данной фразе ?)
Старый 12.12.2011 22:32 dimarik вне форума
dimarik
 
Аватар для dimarik
RIP: вымысел или реальность? MovieRIP: НЛО существует!
Что, черт возьми, делает этот RIP и на кой он нужен?
Старый 12.12.2011 22:43 smithy вне форума
smithy
@dimarik, AdvancedMovieClip изначально назывался MovieRIP (или как-то так). А на второй вопрос ответ лучше меня даст сам автор =)

@in4core, еще я бы в методе getFrameAlpha не возвращал бы -1. Если кадра не существует - тогда RTE, как в нормальном мувике. А то не могу представить себе альфу -1
Старый 12.12.2011 22:50 dimarik вне форума
dimarik
 
Аватар для dimarik
getFrameAlpha? Очень интересно. Альфа. У кадра. Да. Альфа. У кадра.
А! Flash IDE никак не отпускает. Понятно.
Старый 12.12.2011 23:47 in4core вне форума
in4core
 
Аватар для in4core
@toAll некоторые методы ясное дело вымысел* и по большей части практического смысла не имеют - я их так набил от души как говорится. Потихоньку усовершенствуя фреймворк, я что то удаляю, что то добавляю - в итоге скорее всего все это сойдет на нет, останутся только нужные часто моменты.

dimarik - про альфа кадра и связь с IDE вообще не понял к чему это. В данном классе кадр - есть контейнер типа спрайт , альфой контейнера мы можем управлять - почему бы не дать возможность ее менять быстро? Я считаю надо - тут даже ради прикола в цикле прогнать альфу для каждого кадра* от 0.1 получится некая твин-анимация) тоесть какая то практическая сущность в этом есть.

smithy - честно говоря хочется вообще отказать от RTE по возможности, а так впринцие везде вместо null можно было бы ошибку ловить. -1 - ну это как со строками например - если индекса нету - нате вам -1. так и тут - да ну и по большей части геттер на альфу требуется так редко...
Старый 12.12.2011 23:49 in4core вне форума
in4core
 
Аватар для in4core
MovieRIP - почему так названо было
* Requiescat in pace (riposi in pace, rest in peace) — традиционная надпись на надгробьях в англоязычных странах, представляющая собой аббревиатуру печальной фразы «покойся с миром»/«Rest In Peace».
*
Да так ради прикола, так как по большей части мс давно в прошлом для коддеров.
Старый 13.12.2011 00:39 smithy вне форума
smithy
@in4core, ну да, согласен про RTE, иногда так хочется чтобы эти дурацкие RTE не вылазили, особенно после релиза. Но что поделаешь
Старый 13.12.2011 02:16 crazyone вне форума
crazyone
 
Аватар для crazyone
Фреймво... что?
Старый 13.12.2011 08:15 fish_r вне форума
fish_r
 
Аватар для fish_r
Цитата:
@in4core, ну да, согласен про RTE, иногда так хочется чтобы эти дурацкие RTE не вылазили, особенно после релиза. Но что поделаешь
Ну, вы блин даёте! ©

Старый 13.12.2011 11:42 smithy вне форума
smithy
Цитата:
Ну, вы блин даёте! ©
Вы не согласны? =)

@in4core, вот еще хотел спросить про класс Frame: во-первых, зачем у кадра поле _number? Кадры лежат в массиве, и вполне логично что номер кадра = индекс в массиве + 1. Во-вторых - зачем в internal классе геттеры и сеттеры на поля, которые все равно никто кроме MovieRIP не увидит? Там можно смело было бы обойтись public var.
Обновил(-а) smithy 13.12.2011 в 11:54
Старый 13.12.2011 11:42 gloomyBrain вне форума
gloomyBrain
 
Аватар для gloomyBrain
@fish_r, smithy просто забыл bb-коды [sarcasm]...[/sarcasm]
Старый 14.12.2011 22:41 dimarik вне форума
dimarik
 
Аватар для dimarik
Тест. [irony]фреймворк[/irony]
Старый 17.12.2011 22:06 cleptoman вне форума
cleptoman
 
Аватар для cleptoman
MovieTRIP
Старый 18.12.2011 16:24 TERRORist вне форума
TERRORist
 
Аватар для TERRORist
спасибо)
 

 


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


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