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

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

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

Регистрация: Apr 2006
Адрес: Екатеринбург
Сообщений: 55
Отправить сообщение для deep70 с помощью ICQ
По умолчанию Координаты клипа - слушатель мыши

Здравствуйте.
Вопрос скорее по алгебре, чем по AS3, но все же рядом...
Итак есть слушатель MOUSE_MOVE - слушает область размером с весь stage
Самое простое - привязать к курсору клип:
Код AS3:
mc.x=mouseX;
мне понадобилось инвертировать управление - решил так:
Код AS3:
mc.x=mouseX*(-1)+stage.width;
т.о. курсор мыши и mc встречаются на половине stage.width
а вот дальше... в общем мне нужно, чтобы координаты клипа зависели еще и от тех координат, что были у него на момент попадания мыши на область stage.
Например, мышь покинула область прослушивания при mouseX==300, и mc остановился в координате mc.x==150
Когда мышь вернулась на область прослушивания при mouseX==200, то mc и курсор должны встретиться уже в другой координате (200-150)/2 и там встречаться (а также расходиться вокруг этой координаты) до тех пор пока мышь не отвалит за край stage.
__________________
О добром, разумном, вечном...


Последний раз редактировалось deep70; 24.12.2010 в 01:10.
Старый 24.12.2010, 02:13
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 2  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Давайте Вы еще разок подумаете и еще разок опишите чего хотите. Ибо я, например, с трудом себе представляю как мышь на координате х=200 встретится с клипом, который в координате х=150 - в точке х=25, при инверсии(!). Удачи.
__________________
Reality.getBounds(this);

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

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
Не совсем понял задачу, но в любом случае мне кажется можно оперировать исключительно дельтой.
Т.е. не присваивать иксу мувиклипа какое-то статичное значение каждый раз, а делать что-то типа:
Код AS3:
mc.x += stage.width - (mouseX - prevMouseX)
 
//или 
 
mc.x -= mouseX - prevMouseX
С такой структурой нам пофиг будет где клип находится, законы для него будут одинаковые в любой точке и любой момент времени.

Ну там проверки еще навесить чтоб мувиклип за екран не улетел.
__________________
Кто к нам с чем для чего - тот у нас того от того.

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

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

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

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
Если так, то тогда считать уж никак не от stage.width а от какого-то lastFixedMcPos.
__________________
Кто к нам с чем для чего - тот у нас того от того.

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Код AS3:
package 
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;
	import flash.events.MouseEvent;
/* * * * * * * * * *
*                  *
*  @author wolsh   *
*                  *
\* * * * * * * * * */
	public class Main extends Sprite 
	{
		private var _mc			:Sprite = new Sprite();
		private var _center		:Sprite = new Sprite();
		private var _floor		:Sprite = new Sprite();
		private var _centerX	:Number;
		private var _centerY	:Number;
 
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			stage.align = StageAlign.TOP_LEFT;
            stage.scaleMode = StageScaleMode.NO_SCALE;
			stage.showDefaultContextMenu = false;
			// entry point
			_floor.graphics.beginFill(0xEEEEEE);
			_floor.graphics.drawRect(0, 0, 400, 400);
			this.addChild(_floor);
			_floor.x = _floor.y = 100;
 
			_center.graphics.beginFill(0x00FF00);
			_center.graphics.drawCircle(0, 0, 2);
			_center.x = _center.y = 200;
			_floor.addChild(_center);
 
			_mc.graphics.beginFill(0x000000);
			_mc.graphics.drawCircle(0, 0, 5);
			_mc.x = _mc.y = 200;
			_floor.addChild(_mc);
 
			_floor.addEventListener(MouseEvent.ROLL_OVER, onRollOver);
			_floor.addEventListener(MouseEvent.ROLL_OUT, onRollOut);
		}
 
		private function onRollOut(event:MouseEvent):void 
		{
			stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMove);
		}
 
		private function onRollOver(event:MouseEvent):void 
		{
			_centerX = _floor.mouseX - (_floor.mouseX - _mc.x) / 2;
			_centerY = _floor.mouseY - (_floor.mouseY - _mc.y) / 2;
			_center.x = _centerX;
			_center.y = _centerY;
			stage.addEventListener(MouseEvent.MOUSE_MOVE, onMove);
		}
 
		private function onMove(event:MouseEvent):void 
		{
			_mc.x = Math.max(0, Math.min(_centerX - (_floor.mouseX - _centerX), 400));
			_mc.y = Math.max(0, Math.min(_centerY - (_floor.mouseY - _centerY), 400));
			event.updateAfterEvent();
		}
 
	}
 
}
Вложения
Тип файла: zip InvertedMouse.zip (1.7 Кб, 33 просмотров)
__________________
Reality.getBounds(this);

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

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
Ну раз пошла такая пьянка вот и продолжение моей идеи
Код AS3:
package 
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;
	import flash.events.MouseEvent;
/** * * * * * * * *
*                  *
*  @author wolsh   *
*                  *
* * * * * * * * * */
	public class Main extends Sprite 
	{
		private var _mc			:Sprite = new Sprite();
		//private var _center		:Sprite = new Sprite();
		private var _floor		:Sprite = new Sprite();
		//private var _centerX	:Number;
		//private var _centerY	:Number;
 
		private var _lastMouseX:int;
		private var _lastMouseY:int;
 
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			stage.align = StageAlign.TOP_LEFT;
            stage.scaleMode = StageScaleMode.NO_SCALE;
			stage.showDefaultContextMenu = false;
			// entry point
			_floor.graphics.beginFill(0xEEEEEE);
			_floor.graphics.drawRect(0, 0, 400, 400);
			this.addChild(_floor);
			_floor.x = _floor.y = 100;
 
			/*_center.graphics.beginFill(0x00FF00);
			_center.graphics.drawCircle(0, 0, 2);
			_center.x = _center.y = 200;
			_floor.addChild(_center);*/
 
			_mc.graphics.beginFill(0x000000);
			_mc.graphics.drawCircle(0, 0, 5);
			_mc.x = _mc.y = 200;
			_floor.addChild(_mc);
 
			_floor.addEventListener(MouseEvent.ROLL_OVER, onRollOver);
			_floor.addEventListener(MouseEvent.ROLL_OUT, onRollOut);
		}
 
		private function onRollOut(event:MouseEvent):void 
		{
			stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMove);
		}
 
		private function onRollOver(event:MouseEvent):void 
		{
			/*_centerX = _floor.mouseX - (_floor.mouseX - _mc.x) / 2;
			_centerY = _floor.mouseY - (_floor.mouseY - _mc.y) / 2;
			_center.x = _centerX;
			_center.y = _centerY;*/
 
			_lastMouseX = mouseX;
			_lastMouseY = mouseY;
 
			stage.addEventListener(MouseEvent.MOUSE_MOVE, onMove);
		}
 
		private function onMove(event:MouseEvent):void 
		{
			//_mc.x = Math.max(0, Math.min(_centerX - (_floor.mouseX - _centerX), 400));
			//_mc.y = Math.max(0, Math.min(_centerY - (_floor.mouseY - _centerY), 400));
			var deltaX:int = _lastMouseX - mouseX;
			var deltaY:int = _lastMouseY - mouseY;
 
			_mc.x = _mc.x + deltaX > 400 ? 400 : 
			_mc.x + deltaX < 0 ? 0 : _mc.x + deltaX;
 
			_mc.y = _mc.y + deltaY > 400 ? 400 : 
			_mc.y + deltaY < 0 ? 0 : _mc.y + deltaY;
 
			_lastMouseX = mouseX;
			_lastMouseY = mouseY;
 
			event.updateAfterEvent();
		}
 
	}
 
}
Для сравнения оставил и предыдущий код, но закомментировал.
__________________
Кто к нам с чем для чего - тот у нас того от того.


Последний раз редактировалось Dukobpa3; 24.12.2010 в 03:45.
Старый 24.12.2010, 12:46
deep70 вне форума Посмотреть профиль Отправить личное сообщение для deep70 Посетить домашнюю страницу deep70 Найти все сообщения от deep70
  № 8  
Ответить с цитированием
deep70
 
Аватар для deep70

Регистрация: Apr 2006
Адрес: Екатеринбург
Сообщений: 55
Отправить сообщение для deep70 с помощью ICQ
Цитата:
Сообщение от Wolsh Посмотреть сообщение
Давайте Вы еще разок подумаете и еще разок опишите чего хотите. Ибо я, например, с трудом себе представляю как мышь на координате х=200 встретится с клипом, который в координате х=150 - в точке х=25, при инверсии(!). Удачи.
Да. Тут я напутал. :-[ к (200-150)/2 надо было прибавить mc.x.

Цитата:
Сообщение от Dukobpa3 Посмотреть сообщение
Ну раз пошла такая пьянка<.....>
Это то что нужно! Большое спасибо за участие
__________________
О добром, разумном, вечном...


Последний раз редактировалось deep70; 24.12.2010 в 16:19.
Старый 24.12.2010, 15:41
iflamberg вне форума Посмотреть профиль Отправить личное сообщение для iflamberg Найти все сообщения от iflamberg
  № 9  
Ответить с цитированием
iflamberg
 
Аватар для iflamberg

Регистрация: Jan 2009
Сообщений: 1,651
Ну наконец на форуме появились телепаты =D
сорри за оффтоп
__________________
мой пустой блог

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

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

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


 


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


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