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

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

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

Регистрация: Feb 2012
Сообщений: 1,540
По умолчанию Создание твина. Дайте ссылку на пример.

Дайте ссылку на пример создания твина с использованием изингов.
Весь мой твин сделан на getTimer().
Например, найти текущую позицию:
Код AS3:
position=getTimer()-startTime;
position/=1000;
Обновить время:
Код AS3:
startTime=getTimer()-position*1000;
Но вот как сделать изинги?
Например, это работает на ура:
Код AS3:
target[parameter]=(parameters[parameter]-target[parameter])/(duration-position);
А вот это работает очень быстро:
Код AS3:
target[parameter]=(parameters[parameter]-target[parameter])*(position/duration);
Дать код своего твина не могу, но уточнить некоторые моменты могу.

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

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
http://www.gizma.com/easing/#quad1
А чем код того же твина от зеленых носков не удовлетворил?
__________________
тут я

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

Регистрация: Feb 2012
Сообщений: 1,540
Цитата:
А чем код того же твина от зеленых носков не удовлетворил?
Да нет
Удовлетворил, но я хочу понять, почему у меня ничего не получается.

Добавлено через 13 минут
Кажется я понял.
Между примером этого сайта и в моим твином есть отличие:
У меня каждый раз используется новое значение target[parameter], а в примере этого сайта используется
начальное значение target[parameter].
Именно в этом и была проблема. Вот, кому надо, готовый рабочий пример твина без глюков:
Код AS3:
package 
{
	import flash.display.Shape;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.utils.*;
 
	/**
	 * ...
	 * @author V-Games
	 */
	public class Main extends Sprite 
	{
 
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
			var spr:Sprite = new Sprite();
			addChild(spr);
			spr.graphics.beginFill(0x00FF00);
			spr.graphics.drawCircle(0, 0, 20);
			spr.graphics.endFill();
 
			createTween(spr, 2, { x:100, y:100 } );
			setTimeout(trace, 2000, 'timer finished');
		}
		//------------------ tween
		public var tar:Object;
		public var dur:Number;
		public var par:Object;
		public var args:Array;
		public var startTime:Number;
		public var pos:Number;
		public var main:Shape;
		public function createTween(target:Object, duration:Number, parameters:Object):void {
			tar = target;
			dur = duration;
			par = parameters;
			pos = 0;
			args = [];
			startTime = getTimer();
			main = new Shape();
 
			for (var p:String in par) {
				args.push([tar[p], p]);
			}
 
			main.addEventListener(Event.ENTER_FRAME, _onTimeChange);
		}
 
		private function _onTimeChange(e:Event):void {
			updatePosition();
			updateTime();
			nextPosition();
		}
 
		private function updateTime():void {
			startTime = getTimer() - pos * 1000;
		}
		private function updatePosition():void {
			pos = (getTimer() - startTime) / 1000;
			if (pos >= dur) {
				stop();
			}
		}
 
		private function nextPosition():void {
			for (var i:uint = 0; i < args.length; i++) {
				var p:String = args[i][1];
				var b:Number = args[i][0];
				tar[p] = easeCircIn(pos, b, par[p] - b, dur);
			}
		}
 
		public function stop():void {
			main.removeEventListener(Event.ENTER_FRAME, _onTimeChange);
			pos = dur;
			trace('tween finished');
		}
 
		public function easeLinear(t:Number, b:Number, c:Number, d:Number):Number {
			return c*t/d + b;
		}
		public function easeCircIn(t:Number, b:Number, c:Number, d:Number):Number {
			t /= d;
			return -c * (Math.sqrt(1 - t*t) - 1) + b;
		}
 
	}
 
}


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

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

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


 


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


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