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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 14.03.2011, 05:33
kseniya вне форума Посмотреть профиль Отправить личное сообщение для kseniya Найти все сообщения от kseniya
  № 11  
Ответить с цитированием
kseniya
 
Аватар для kseniya

Регистрация: Oct 2010
Адрес: Новосиб
Сообщений: 122
Может быть TweenLite поможет? http://www.greensock.com/as/swf/EaseVisualizer.swf

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

Регистрация: Feb 2010
Сообщений: 811
Отправить сообщение для Universe с помощью ICQ Отправить сообщение для Universe с помощью Skype™
to kseniya та нет, это не то немного. Тут нужно именно построение кривой.
Зашёл на сайт bezier.ru - на их сайте есть хорошие демки, только вот не могу исходники к ним найти. Может есть возможность глянуть на код исходника, в частности интересует пример № 6

Старый 14.03.2011, 13:26
shootkin вне форума Посмотреть профиль Отправить личное сообщение для shootkin Найти все сообщения от shootkin
  № 13  
Ответить с цитированием
shootkin

Регистрация: Apr 2010
Сообщений: 32
Для интерполяции движения по ключевым точкам больше подойдут не кривые Безье, а, например, сплайны Катмулла-Рома. Вот пример с функцией построения сплайна. Правда он на корейском Но исходники достаточно очевидные.

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

Регистрация: Feb 2010
Сообщений: 811
Отправить сообщение для Universe с помощью ICQ Отправить сообщение для Universe с помощью Skype™
ну честно сказать немного не понял, в чём преимущества Катмулл-Рома? По-моему точки на примере проставляет точно также

Старый 14.03.2011, 17:14
shootkin вне форума Посмотреть профиль Отправить личное сообщение для shootkin Найти все сообщения от shootkin
  № 15  
Ответить с цитированием
shootkin

Регистрация: Apr 2010
Сообщений: 32
Если реализовывать с нуля, то сплайны Катмулл-Рома проще. Возможно и оптимальнее по вычислительным затратам.

Старый 15.03.2011, 22:38
Universe вне форума Посмотреть профиль Отправить личное сообщение для Universe Найти все сообщения от Universe
  № 16  
Ответить с цитированием
Universe
 
Аватар для Universe

Регистрация: Feb 2010
Сообщений: 811
Отправить сообщение для Universe с помощью ICQ Отправить сообщение для Universe с помощью Skype™
Но всё-таки хотелось бы покапаться в демках от Bezier.ru! Ну или хотя бы какой нить простенький примерчик с реализацией движения по точкам, а то как то странно, вроде хороший сайт, а примеров использования класса нету

Старый 16.03.2011, 00:46
Alex Lexcuk вне форума Посмотреть профиль Отправить личное сообщение для Alex Lexcuk Посетить домашнюю страницу Alex Lexcuk Найти все сообщения от Alex Lexcuk
  № 17  
Ответить с цитированием
Alex Lexcuk

блогер
Регистрация: Mar 2008
Адрес: Донецк_city
Сообщений: 1,094
Записей в блоге: 5
Цитата:
Сообщение от Universe Посмотреть сообщение
Но всё-таки хотелось бы покапаться в демках от Bezier.ru! Ну или хотя бы какой нить простенький примерчик с реализацией движения по точкам, а то как то странно, вроде хороший сайт, а примеров использования класса нету
Набросал по быстрому
Код AS3:
package  
{
 
	import flash.display.*;
	import flash.events.*;
	import flash.geom.*;
	/**
	 * ...
	 * @author Alex Lexcuk
	 */
	public class DocMoveCurve extends Sprite
	{
 
		public var debSp:Sprite;
		public var lastM:Point = new Point();
		public var curM:Point = new Point();
		public var b:Point = new Point();
		public var speedStep:int = 10;//перелет по 10 пикселов
		public var speedFrameStep:int = 10;
		public var frameCount:int;
 
		public var curveArr:Vector.<Point> = new Vector.<Point>();
		public var persSp:Sprite;
		public function DocMoveCurve() 
		{
			addChild(debSp = new Sprite());
			addChild(persSp = new Sprite());
			debSp.graphics.lineStyle(0);
			persSp.graphics.beginFill(0xFF0080);
			persSp.graphics.drawCircle(0, 0, 5);
			curveArr.push(new Point());
			stage.addEventListener(MouseEvent.CLICK, stageClickHandler);
			addEventListener(Event.ENTER_FRAME, enterFrameHandler);
		}
 
		public function enterFrameHandler(e:Event):void {
			persSp.x = curveArr[frameCount].x;
			persSp.y = curveArr[frameCount].y;
			frameCount++;
			if (frameCount >= curveArr.length) frameCount = 0;
		}
 
		public function stageClickHandler(e:MouseEvent):void {
			drawMousePath();
		}
 
		public function drawMousePath():void {
			var mx:Number = debSp.mouseX;
			var my:Number = debSp.mouseY;
			var p:Point = new Point(mx, my);
 
			if (b.x == 0 && b.y == 0) {//первый старт
				p.normalize(p.length/1.5);
				p = new Point(p.y, -p.x);//левая нормаль
				p = p.add(new Point(mx/1.5, my/1.5));
				b = p.clone();//плавная точка бизера
			} else {//второй и следующие старты
				//вектор предыдущей точки плавности на пред мышкину точку
				var bt:Point = new Point(lastM.x - b.x,lastM.y - b.y);
				//вектор предмышки на мышку
				var mt:Point = new Point(lastM.x - mx, lastM.y - my);
				bt.normalize( mt.length / 2);
				b = bt.add(lastM);
			}
			debSp.graphics.moveTo(lastM.x, lastM.y);
			debSp.graphics.curveTo(b.x, b.y, mx, my);
			debSp.graphics.drawCircle(b.x, b.y, 4);
 
			curM = new Point(mx, my);
			addToArrPosCurve();
			lastM = new Point(mx, my);
		}
 
		public function addToArrPosCurve():void {
			var i:int;
			var p:Point = new Point();
			var lp:Point = lastM.clone();
			var sp:Point;
			for (i = 0; i < 100; i++) {
				p.x = myCurveTo(lastM.x, b.x, curM.x, i / 100);
				p.y = myCurveTo(lastM.y, b.y, curM.y, i / 100);
				sp = p.subtract(lp);
				if (sp.length > speedStep) {
					lp = p.clone();
					curveArr.push(p.clone());
					debSp.graphics.drawCircle(p.x, p.y, 4);
				}
			}
		}
 
		public function myCurveTo(param1:int, param2:int, param3:int, param4:Number):Number{
			return (1 - param4) * (1 - param4) * param1 + 2 * param4 * (1 - param4) * param2 + param4 * param4 * param3;
		}
	}
 
}
http://murmadillo.tut.su/m/doc-move-curve.swf
Надо мышкой кликать, потом будет шарик по мышиной бизерной кривой летать.
__________________
Гоночка

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

Регистрация: Feb 2010
Сообщений: 811
Отправить сообщение для Universe с помощью ICQ Отправить сообщение для Universe с помощью Skype™
Пошарив по нету нарыл интересную библиотеку по имени Grape.
Поюзав примеры понял что штука интересная и вполне подходит под мои нужды, но всё таки осталось пару вопросов которые я пока не выяснил:
1. Как остановить процесс рендеринга? Я трейсю события TICK, но он продолжает тикать даже после завершения анимации. Должен ли я просто удалить слушатель в функции COMPLETE? Будет ли срабатывать сборщик мусора после удаления слушателя, или я должен сделать что-то еще, чтобы остановить анимацию?
2. Как я могу включить реверс анимации / изменить скорость анимации в любой момент времени? Я имею в виду, представьте, 2 шара, движущегося в разных направлениях, когда они ударяются друг от друга, они изменяют своё движения на противоположное, как я могу сделать что-то вроде этого?
3. Как я могу остановить анимацию?
4. Какую информацию я могу получить от объектов во время анимации? Например, мне нужно знать, какое расстояние прошёл объект, передаваемый по кривой и сколько осталось идти. Или как я могу вытянуть свойства объекта на пути? Например, как сделать увеличение объекта, когда он движется по кривой?
5. Как я могу заставить объект поворачиваться на пути - чтото типа "Orient to path"?

Добавлено через 3 минуты
Вот ссылка на саму библиотеку :
http://code.google.com/p/grape-as3/
Немного описаловки и примеров:
http://blog.generalrelativity.org/ac...comment-166445

Могу выслать свой класс по работе с этим Grape, если кому надо.

Старый 16.03.2011, 09:54
ЗлОй ПрОграММер вне форума Посмотреть профиль Отправить личное сообщение для ЗлОй ПрОграММер Найти все сообщения от ЗлОй ПрОграММер
  № 19  
Ответить с цитированием
ЗлОй ПрОграММер

Регистрация: Nov 2010
Сообщений: 434
Чтобы повернуть обьект(object) в сторону точки (NextPoint) подойдёт вот этот код:
(за вами остаётся только каждый раз вычислять координату обьекта и точку в которую он будет двигаться)

Код AS3:
dx = objectPoint.x - NextPoint.x;
dy = objectPoint.y - NextPoint.y;
 
if (dx < 0) angle1 = Math.atan(dy/dx)*180/Math.PI+90
else angle1 = 359 + Math.atan(dy/dx)*180/Math.PI-90;
 
if (object.rotation >= 0) angle2 = object.rotation
else angle2 = 360 + object.rotation;
 
dAngle = Math.abs(angle1-angle2);
 
if (dAngle > 2.7) {
  if (dAngle < (360 - dAngle)) {
        if (angle1 < angle2) object.rotation -=2
	else object.rotation += 2; 
  }
  else {
        if (angle1 < angle2) object.rotation += 2
	else object.rotation -= 2; 
  }						
}
можете сделать чтобы он поворачивался за курсором мыши тогда код:
Код AS3:
dx = objectPoint.x - stage.MouseX;
dy = objectPoint.y - stage.MouseY;


Последний раз редактировалось ЗлОй ПрОграММер; 16.03.2011 в 09:57.
Создать новую тему Ответ Часовой пояс GMT +4, время: 20:51.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

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

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


 


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


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