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

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

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

Регистрация: Nov 2006
Сообщений: 487
Отправить сообщение для marat_sa с помощью ICQ Отправить сообщение для marat_sa с помощью Skype™
По умолчанию "Примагнищивающийся" к мышке объект

Добрый день, как лучше сделать интерактивный объект с таким поведением: когда курсор мыши начинает приближается к нему, он тоже начинает приближаться к мышке, как бы магнититься, только плавно, отводишь, он возвращается на место.

Я сделал, но, думаю, не очень рационально. В частности, если высчитывать расстояние как гипотенузу от центра объекта до мыши, то для прямоугольных вытянутых объектов это не очень красиво, ты довел мышку до края объекта уже, а расстояние до центра еще большое и объект "не очень активен" ))

Подскажите пожалуйста...
__________________
Стой! Опасная зона! Работа мозга!

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

Регистрация: Dec 2008
Адрес: Лапландия
Сообщений: 67
так может лучше назначить область действия не с краю, а небольшой радиус около центра

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

Регистрация: Nov 2006
Сообщений: 487
Отправить сообщение для marat_sa с помощью ICQ Отправить сообщение для marat_sa с помощью Skype™
ну так и есть вокруг центра радиус, я и говорю, что это плохо...
Вот рисунок вобщем
Изображения
 
__________________
Стой! Опасная зона! Работа мозга!

Старый 09.06.2009, 11:43
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 4  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
-находим некий условный центр объекта через getBounds(stage), например
-шагаем с нужной точностью по отрезку, соединяющему мышь c этим центром, походу проверяя hitTestPoint
-если хит найдется на достойном для снапа расстоянии, двигаем

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

Регистрация: Nov 2006
Сообщений: 487
Отправить сообщение для marat_sa с помощью ICQ Отправить сообщение для marat_sa с помощью Skype™
Алгоритм для движения вот тоже вопрос...
На ENTER_FRAME надо какую-то зависимость провести от чего-то - чем ближе мышка, тем больше сила притяжения.

Как это выразить кодом?
__________________
Стой! Опасная зона! Работа мозга!

Старый 09.06.2009, 12:47
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 6  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
определние снапа ( на ENTER_FRAME, например)
Код AS3:
private function checkSnapDistance(evnt:Event):void 
{
	if (!stage) return;
	//координаты центра
	var boundsRect:Rectangle = this.getBounds(stage);
	var cX:Number = boundsRect.x + boundsRect.width / 2;
	var cY:Number = boundsRect.y + boundsRect.height / 2;
	//мышиные координаты
	var mX:Number = stage.mouseX;
	var mY:Number = stage.mouseY;
	//направление на центр
	var dir:Number = Math.atan2( cY - mY, cX - mX);
	//дистанция примагничивания
	var snapDistance:Number = 50;
	//тестовая точка
	var tX:Number = mX + snapDistance * Math.cos(dir);
	var tY:Number = mY + snapDistance * Math.sin(dir);
 
	if (this.hitTestPoint(tX, tY, true))
	{
		trace("snap");
	}
}
зы
не спортивно это как-то спрашивать код, не потрудившись даже сформулировать толком, в чем трабл
трудно представить, что проблема посчитать расстояние между точками или двинуть объект в нужном направлении, в зависмости от этого расстояния

Старый 09.06.2009, 13:29
marat_sa вне форума Посмотреть профиль Отправить личное сообщение для marat_sa Посетить домашнюю страницу marat_sa Найти все сообщения от marat_sa
  № 7  
Ответить с цитированием
marat_sa
 
Аватар для marat_sa

Регистрация: Nov 2006
Сообщений: 487
Отправить сообщение для marat_sa с помощью ICQ Отправить сообщение для marat_sa с помощью Skype™
А проблему в сущности то нет.
Это просто интерес профессиональный, кто как делает. Что бы не смущать людей, код не дал, дабы не сужать полет фантазии)))
Мой вариант реализован на шапке на сайте моем
myFlashWorks.ru
=)

Добавлено через 1 час 27 минут
А вот тут уже наткнулся на траблу((
Скорость движения объекта к мышке должна быть обратно пропорцианальна расстоянию между ними.
Грубо говоря, так
speedX = 1 / (objX - mouseX);

Вот когда objX = mouseX, происходит сами понимаете что %\
Как избавиться от нуля в знаменателе или может формулу я неправильную выбрал?
__________________
Стой! Опасная зона! Работа мозга!

Старый 09.06.2009, 18:06
firsoff вне форума Посмотреть профиль Отправить личное сообщение для firsoff Посетить домашнюю страницу firsoff Найти все сообщения от firsoff
  № 8  
Ответить с цитированием
firsoff

Регистрация: Sep 2005
Адрес: Snezhinsk, Russia
Сообщений: 367
Отправить сообщение для firsoff с помощью ICQ Отправить сообщение для firsoff с помощью Skype™
Марик, введи очевидную проверку на objX == mouseX

Старый 09.06.2009, 18:28
marat_sa вне форума Посмотреть профиль Отправить личное сообщение для marat_sa Посетить домашнюю страницу marat_sa Найти все сообщения от marat_sa
  № 9  
Ответить с цитированием
marat_sa
 
Аватар для marat_sa

Регистрация: Nov 2006
Сообщений: 487
Отправить сообщение для marat_sa с помощью ICQ Отправить сообщение для marat_sa с помощью Skype™
Макс, а если objX = 0.001, а mouseX = 0? Проверка не сработает, а объект улетит со скоростью 1000 pix/frame...

Округлять тоже не вариант, слишком много потом условий писать, формулу надо другую...
__________________
Стой! Опасная зона! Работа мозга!

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Код AS3:
speedX = 1/Math.max(1,(objX - mouseX));

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

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

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


 


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


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