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

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

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

Регистрация: Mar 2011
Адрес: Ibiza
Сообщений: 13
Question остановка объекта в точке курсора

есть шарик с instance name - mc
при клике мышки он летит в сторону курсора и должен остановиться в точке, где был произведен клик.. при клике он летит и постепенно останавливается, но останавливается не совсем в нужной точке, а пролетает немного дальше или не долетает..
Код AS3:
var X:Number = mouseX;
var Y:Number = mouseY;
 
//Скорость шарика
var mc_speedXTO:Number;
var mc_speedYTO:Number;
 
//Скорость движения шара
var speed:Number = 10;
 
//Добавляем ENTER_FRAME , что анимирует движение шара
stage.addEventListener(MouseEvent.MOUSE_DOWN, mouse);
stage.addEventListener(Event.ENTER_FRAME, moveBall);
 
function mouse(e:Event):void
{
	//Вычисляем расстояния по x и y от шара до точки
	var distance_posX:Number = mouseX - mc.x;
	var distance_posY:Number = mouseY - mc.y;
	//Вычисляем расстояние от точки до шара
	var dist_pos = Math.sqrt(distance_posX * distance_posX + distance_posY * distance_posY);
	//Вычисляем угол между шаром и мышью
	var angle:Number = Math.atan2(distance_posY,distance_posX);
 
	var distance_mouseX:Number = mouseX - mc.x;
	var distance_mouseY:Number = mouseY - mc.y;
	//Вычисляем расстояние от шара до мышки
	var dist_mouse = Math.sqrt(distance_mouseX * distance_mouseX + distance_mouseY * distance_mouseY);
 
 
	mc_speedXTO = Math.cos(angle) * speed * 4;
	mc_speedYTO = Math.sin(angle) * speed * 4;
	mc.x +=  mc_speedXTO;
	mc.y +=  mc_speedYTO;
 
 
	if (dist_mouse > 0)
	{
		var mc_angle = Math.atan2(distance_mouseY,distance_mouseX);
 
		mc_speedXTO = Math.cos(mc_angle) * speed * 4;
		mc_speedYTO = Math.sin(mc_angle) * speed * 4;
 
 
	}
 
 
}
 
function moveBall(e:Event):void
{
	mc.x +=  mc_speedXTO;
	mc.y +=  mc_speedYTO;
	//Уменьшаем скорость
	mc_speedXTO *=  0.9;
	mc_speedYTO *=  0.9;
 
}
помогите разобраться в чем ошибка


Последний раз редактировалось Gonsalez; 28.04.2011 в 13:56.
Старый 28.04.2011, 14:42
maxkar вне форума Посмотреть профиль Отправить личное сообщение для maxkar Найти все сообщения от maxkar
  № 2  
Ответить с цитированием
maxkar

Регистрация: Nov 2010
Сообщений: 497
Скорость шарика и замедление фиксированы. Шарик суммарно пролетает примерно 440 точек по прямой. Нужно характеристики движения (скорость, замедление и т.п.) вычислять исходя из координат. Кстати, зачем вы угол то считаете?
Код AS3:
function mouse(e : Event) : void {
  const deltax : Number = mouseX - mc.x;
  const deltay : Number = mouseY - mc.y;
  mc_speedXTO = deltax / 11;
  mc_speedYTO = deltay / 11;
  mc.x += mc_speedXTO;
  mc.y += mc_speedYTO;
}
Сумму (суммароное перемещение) вроде бы правильно посчитал. Код не компилировал, возможны опечатки.

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

Регистрация: Nov 2009
Адрес: Тула / Москва
Сообщений: 734
Отправить сообщение для ChuwY с помощью ICQ Отправить сообщение для ChuwY с помощью Skype™
Юзайте твинеры и будет вам счастье.
__________________
9 из 10 голосов в моей голове сказали наркотикам "НЕТ"
Мои ачивки: художник-паразит.

Старый 28.04.2011, 16:35
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 4  
Ответить с цитированием
goodguy
Banned

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Можно использовать, что-то типа этого:
Код AS3:
if (Math.abs(destination.x - object.x) < 5 && Math.abs(destination.y - object.y) < 5) { 
     // остановить объект, если он находится ближе 5 пикселей до места наначения
}
Но я бы по теореме Пифагора расчитал расстояние, которое объект должен пройти, далее покадрово расчитывал пройденный путь (по той же вхеме), и если он превысил нужное расстояние, останавливал бы, или при приближении замедлял

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

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

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


 


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


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