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

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

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

Регистрация: Aug 2008
Сообщений: 6
По умолчанию Движение в случайную точку

Подскажите пожалуйста как задать клипу движение в случайную точку.
Зранее спасибо!

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

Регистрация: Jul 2008
Адрес: Украина, Херсон
Сообщений: 635
Отправить сообщение для Division с помощью ICQ
Ну допустим есть у тебя точка(случайная, ага) с координатами nx и ny. И есть текущие координаты _x и _y. Чтобы двигаться в точку nx; ny тебе нужно найти вектор движения в ту точку
Код:
dx = nx-_x;
dy = ny-_y;
Потом найдем длину вектора -
Код:
l = Math.sqrt(dx*dx+dy*dy);
Далее
Код:
dx/=l;
dy/=l;
После этого в onEnterFrame объекта пишем

Код:
_x+=dx*Speed;
_y+=dy*Speed;
Где Speed - это наша скорость.

Мог в чем-то ошибиться, так как писал сразу в форуме.
__________________
while(1) {}

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Division, не первый раз вижу эту штуку с квадратным корнем, но теперь вроде поймал автора))
Вот Вы мне объясните, ради чего Вам знать длину гипотенузы? Вы будете смещать клип не по Х и У, а сразу на столько-то пикселей по диагонали?


http://flasher.ru/forum/showthread.php?t=112351
__________________
Reality.getBounds(this);


Последний раз редактировалось Wolsh; 06.08.2008 в 23:14.
Старый 06.08.2008, 23:29
Division вне форума Посмотреть профиль Отправить личное сообщение для Division Найти все сообщения от Division
  № 4  
Ответить с цитированием
Division
 
Аватар для Division

Регистрация: Jul 2008
Адрес: Украина, Херсон
Сообщений: 635
Отправить сообщение для Division с помощью ICQ
Длина гипотенузы(точнее длина вектора), нужна чтобы найти нормализованный вектор направления в нужную точку. Если этот нормализованный вектор умножить на скорость(Speed) и прибавить к нашим координатам, объект переместится ровно на Speed пикселей. Не понимаю что конкретно Вам не нравится (:
__________________
while(1) {}


Последний раз редактировалось Division; 06.08.2008 в 23:37.
Старый 06.08.2008, 23:44
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 5  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
Чтобы двигаться в точку nx; ny тебе нужно найти вектор движения в ту точку
Да Господь с Вами, мне вполне достаточно смещаться по Х и по У, пока они не станут равны координатам точки n. А не нравится тридцать раз в секунду высчитывать квадратные корни)))
__________________
Reality.getBounds(this);

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

Регистрация: Jul 2008
Адрес: Украина, Херсон
Сообщений: 635
Отправить сообщение для Division с помощью ICQ
Блин, я не могу Вас понять (: Интересно, а как вы узнаете, на какое расстояние нужно смещаться по x и по y? Может покажите небольшой примерчик? Где объект с заданной скоростью будет двигаться в точку n.
PS 30 раз в секунду посчитать корень это не страшно. К тому же всегда остается простор для оптимизации.
__________________
while(1) {}

Старый 07.08.2008, 00:23
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 7  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Это с постоянной скоростью
Код:
var dx = (nx-_mc._x)/speed;
var dy = (ny-_mc._y)/speed;
_mc.onEnterFrame = function(){
	this._x += dx
	this._y += dy
}
Это с замедлением до нуля))
Код:
_mc.onEnterFrame = function(){
	this._x += (nx-this._x)/speed;
	this._y += (ny-this._y)/speed;
}
__________________
Reality.getBounds(this);

Старый 07.08.2008, 00:30
Division вне форума Посмотреть профиль Отправить личное сообщение для Division Найти все сообщения от Division
  № 8  
Ответить с цитированием
Division
 
Аватар для Division

Регистрация: Jul 2008
Адрес: Украина, Херсон
Сообщений: 635
Отправить сообщение для Division с помощью ICQ
Ладно, с замедлением до нуля трогать не буду, но первый пример мне почему-то не нравится (:
То есть фактически скорость движения будет зависить от начального расстояние между точками. То есть условие "с заданной скоростью" вы не выполнили (: Да и скорость(speed) на самом деле не скорость, а число кадров, за которое объект доберется от начальной точки до конечной (: То есть если бы я делал игру, например, я бы хотел чтобы мой speed был реально скоростью, количеством пикселей, которое пройду за один кадр. Ваш вариант меня бы не устроил (:
__________________
while(1) {}

Старый 07.08.2008, 00:37
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 9  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
))) Дружище, я бы мог развернуть дискуссию на тему сколько клеток от одного угла тетрадного листа до другого, что собственно и есть пиксели) Но в общем-то Вы правы, я сделал не с заданной скоростью, а с постоянной.
А теперь вопрос - если у нас 30 кадров в секунду и мы достигаем точки за 10 кадров, то....?
__________________
Reality.getBounds(this);


Последний раз редактировалось Wolsh; 07.08.2008 в 00:39.
Старый 07.08.2008, 00:43
Division вне форума Посмотреть профиль Отправить личное сообщение для Division Найти все сообщения от Division
  № 10  
Ответить с цитированием
Division
 
Аватар для Division

Регистрация: Jul 2008
Адрес: Украина, Херсон
Сообщений: 635
Отправить сообщение для Division с помощью ICQ
Ну я надеюсь Вы теперь не будете так вот к квадратным корням придираться? (:

UPD:
Цитата:
А теперь вопрос - если у нас 30 кадров в секунду и мы достигаем точки за 10 кадров, то....?
Упс, не заметил. Я не совсем понял Ваш вопрос. Если нужно определить, когда нужно остановится, то это делается довольно просто. Так как у нас есть скорость Speed и Вы почему-то не любите корни, найдем квадрат скорость

SqSpeed = Speed*Speed;

Потом при движении смотрим, если квадрат расстояния между точками (x2-x1)^2+(y2-y1)^2
меньше квадрата скорости SqSpeed, значит мы дошли до точки. На самом деле мы можем её немного "перепрыгнуть", так что можно смело ставить наши текущие координаты в точку N
__________________
while(1) {}


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

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

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


 


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


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