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

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

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

Регистрация: Sep 2011
Сообщений: 524
По умолчанию спрайт от точки A до точки B - как лучше решить

спрайт находится в точке x;y а должен переместится в точку x1;y1 как легче и проще решить такую задачу?
(кода не надо, речь о самой концепции- может какие есть спецсредства в as3?)
то есть требуется плавное перемещение от начала линии до конца.


Последний раз редактировалось viktorami; 12.12.2013 в 15:32.
Старый 12.12.2013, 15:24
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 2  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
Есть! Анимация, но если Вы сами не можете просто передвинуть обьект, то это наверное немного плохо.

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Кэп мне тут подсказывает, что нужно просто задать ему новые координаты x и y

Старый 12.12.2013, 15:32
viktorami вне форума Посмотреть профиль Отправить личное сообщение для viktorami Найти все сообщения от viktorami
  № 4  
Ответить с цитированием
viktorami

Регистрация: Sep 2011
Сообщений: 524
нет нет. речь идет о плавном перемещении по линии от начала и до конца.

Старый 12.12.2013, 15:39
KumoKairo вне форума Посмотреть профиль Отправить личное сообщение для KumoKairo Найти все сообщения от KumoKairo
  № 5  
Ответить с цитированием
KumoKairo
 
Аватар для KumoKairo

Регистрация: Jan 2013
Сообщений: 550
Записей в блоге: 1
Это называется анимация.
Можно подойти с двух сторон:
1. Высчитать нормированный вектор направления движения, и в каждом кадре прибавлять к вектору положения вектор перемещения умноженный на скорость перемещения до тех пор, пока объект не будет находиться в эпсилон окрестности конечной точки.
2. Составить уравнение кривой Безье первого порядка с учетом желаемого времени прибытия в конечную точку, и в каждом кадре высчитывать, сколько времени прошло от начала запуска анимации и делить на общее время анимации. В результате вычислений получим нормированное значение переменной t в линейном уравнении Безье, что позволит нам получить текущую координату нашего объекта

Старый 12.12.2013, 15:44
viktorami вне форума Посмотреть профиль Отправить личное сообщение для viktorami Найти все сообщения от viktorami
  № 6  
Ответить с цитированием
viktorami

Регистрация: Sep 2011
Сообщений: 524
я попытался взять так:
уравнение линии
y=kx+b
если я буду знать наклон угла линии - то смогу и найти его тангенс - k
но как по двум кординатам найти этот угол?

Старый 12.12.2013, 16:15
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 7  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
Код AS3:
package 
{
	import flash.display.Sprite;
	import flash.events.Event;
 
	public class AnimationTest extends Sprite 
	{
		private var sprite:Sprite;
		private var array:Array;
		public function AnimationTest() 
		{
 
			sprite = new Sprite();
			sprite.graphics.beginFill(0x8E6828);
			sprite.graphics.drawRect(0, 0, 100, 100);
			sprite.graphics.endFill();
			sprite.x = sprite.y = 200;
			addChild(sprite);
			array = ['x' ,sprite.x, 400, 'y', sprite.y, 400];
			addEventListener(Event.ENTER_FRAME, enterFrameHandler);
		}
		private var allTime:Number = 0;
		private var duration:Number = 3;
		private function enterFrameHandler(event:Event):void 
		{
			var time:Number = 1 / 1000 * stage.frameRate;
			allTime += time;
			var ratio:Number = allTime / duration;
			if (allTime >= duration) ratio = 1;
			var length:int = array.length / 3;
			for (var i:int = 0; i < length; i++) 
			{
				const property:String = array[i * 3];
				const start:Number = array[i * 3 + 1];
				const finish:Number = array[i * 3 + 2] - start;
				sprite[property] = ratio * finish + start;
			}
		}
 
	}
 
}

Старый 12.12.2013, 16:20
viktorami вне форума Посмотреть профиль Отправить личное сообщение для viktorami Найти все сообщения от viktorami
  № 8  
Ответить с цитированием
viktorami

Регистрация: Sep 2011
Сообщений: 524
да нет. что то тут не то

Старый 12.12.2013, 16:27
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 9  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
Цитата:
да нет. что то тут не то
Что?) Тогда могу посоветовать почитать про вектора.

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

Регистрация: Jan 2013
Сообщений: 550
Записей в блоге: 1
Я же написал как можно сделать. Не нужны никакие углы, это простейшая векторная алгебра

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

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

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


 


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


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