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

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

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

Регистрация: Apr 2012
Сообщений: 70
По умолчанию Движение объекта к координатам указанных в Point

Добрый день!

Пользовался поиском, но ничего не нашел подходящего.
Так вот:
Есть объект на сцене, с координатами x=100; y=100; (это к примеру) и есть Point(300, 250);
В конце движения объект начинает дрыгаться (как бы 2 последним "кадра" зацикливаются)
Или же есть какие-нибудь другие способы?
Вот док который у меня
Код AS1/AS2:
private function move():void
		{
if (gotoPoint != null || currPoint != gotoPoint)
			{
 
				currPoint = new Point(this.x, this.y);
				trace(Point.distance(currPoint, gotoPoint));
				var angle:Number = Math.atan2(gotoPoint.y - currPoint.y, gotoPoint.x - currPoint.x);
				if (Point.distance(currPoint, gotoPoint) > 0)
				{
					this.x += _moveSpeed * Math.cos( angle );
					this.y += _moveSpeed * Math.sin( angle );
				}
				else
				{
					currPoint = gotoPoint;
				}
			}

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Там 0 никогда не получится. А иногда будут такие числа, которые вообще далеки от нуля. Объект не будет останавливаться.
Вариант лучше - расчитывать суммарное расстояние между всеми точками пути, и при каждом перемещении объекта проверять сколько непройденного пути еще осталось. Т.е. при каждом перемещении объекта, скажем на 2 пикселя, отнимать эти два пикселя от общего пути. И когда он будет <= 0 останавливать объект

Этот способ намного надежнее

Старый 08.10.2012, 19:29
Wazzabi вне форума Посмотреть профиль Отправить личное сообщение для Wazzabi Найти все сообщения от Wazzabi
  № 3  
Ответить с цитированием
Wazzabi

Регистрация: Apr 2012
Сообщений: 70
не очень понял... можете примерчик кода?

Старый 08.10.2012, 19:35
Фенёк вне форума Посмотреть профиль Отправить личное сообщение для Фенёк Найти все сообщения от Фенёк
  № 4  
Ответить с цитированием
Фенёк

Регистрация: May 2011
Сообщений: 221
Ноль то получиться может, то только для этого нужно очень строго рассчитывать шаг перемещения, при том, правда, что для каждого угла, вероятно он будет разный. Можно поступить следующим образом: проверять не стала ли дистанция между точками меньше шага перемещения (в вашем случае это _moveSpeed), если дистанция меньше – то приравнять координаты объекта, координатам поинта. Логика простая – ваш объект при таком условии при попытке «перешагнуть» точку будет отправлен точно туда, где ему нужно быть.

Код AS3:
			if (Point.distance(currPoint, gotoPoint) > _moveSpeed)
				{
					this.x += _moveSpeed * Math.cos( angle );
					this.y += _moveSpeed * Math.sin( angle );
				}
				else
				{
					this.x = currPoint.x;
					this.y = currPoint.y;
					currPoint = gotoPoint;
				}

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Это не совсем правильная логика. Если объект сдвинулся под действием каких-то сил, то он вряд ли уже доберется до точки. А при отсчете дистанции стопудово остановится

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

Регистрация: Apr 2012
Сообщений: 70
2Фенёк, спасибо большое
2caseyryan, а можно какой-нибудь примерчик реализации логики, предлагаемой вами?

Старый 08.10.2012, 20:03
Фенёк вне форума Посмотреть профиль Отправить личное сообщение для Фенёк Найти все сообщения от Фенёк
  № 7  
Ответить с цитированием
Фенёк

Регистрация: May 2011
Сообщений: 221
Поясните еще раз суть вашего метода. Насколько я его понял – необходимо рассчитать длину пути от начальной точки до конечной, а потом каждый шаг отсчитывать сколько процентов от необходимого пути пройдено.

По сути это ведь задача о столкновении двух точек, соотвественно нужно узнать принадлежит ли точка (коннечная) отрезку (траектории движения). Учитывая то, что движени происходит по прямой, достаточно узнать, что координаты точки лежат между координатами отрезка. Соотвественно если расстояние между точками меньше шага перемещения, это значит, что следующий шаг перенесет объект либо за точку, либо на нее. За точку нам точно не надо, по этому ставим объект на нее.

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

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

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


 


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


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