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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 05.06.2014, 02:18
inozemcev вне форума Посмотреть профиль Отправить личное сообщение для inozemcev Найти все сообщения от inozemcev
  № 1  
Ответить с цитированием
inozemcev
[+ 1.0 08.10.14]
 
Аватар для inozemcev

блогер
Регистрация: Mar 2010
Адрес: x = stage.stageWidth/2 y= stage.stageHeight/2
Сообщений: 293
Записей в блоге: 2
По умолчанию двигать поле с помощью захвата мыши

Коллеги, привет. Задача очень простая, но не могу справиться.

Есть некое изометрическое поле (просто спрайт). При захвате мыши в любой точки необходимо двигать поле по направлению обратному от мыши. То есть если пользователь захватил экран и двинул мышь вправо и вниз необходимо подвинуть поле влево и вверх.

Извиняюсь за такой глупый вопрс, три года не писал код, все забыл. Пустаюсь в координатах мыши и поля.

Старый 05.06.2014, 03:46
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 2  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Ну если в стандарте у тебя было sprite.x,y = mouseX,mouseY , то в противоположную сторону нужно просто минус координатам дописать
__________________
Марк Tween

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Сообщение от in4core Посмотреть сообщение
Ну если в стандарте у тебя было sprite.x,y = mouseX,mouseY , то в противоположную сторону нужно просто минус координатам дописать
Было у него, допустим 200, 350, а в противоположную тогда будет -200, - 350. Нестыковочка.

Нужно фиксировать предыдущее положение мыши, и смотреть на сколько пикселей изменились координаты сейчас. И вот уже эти числа реверсировать. Общая идея:
Код AS3:
package  {
 
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
 
	public class TestClass extends Sprite {
 
		private var _dragField:	Sprite 	= new Sprite();
		private var _mouseDown:	Boolean = false;
		private var _prevX:		int		= -1; 
		private var _prevY:		int		= -1; 
 
		public function TestClass() {
			_dragField.graphics.beginFill(0x80FF00);
			_dragField.graphics.drawRect(0, 0, 200, 200);
			_dragField.graphics.endFill();
			_dragField.x = _dragField.y = 100;
			addChild(_dragField);
			stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
			stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
			addEventListener(Event.ENTER_FRAME, onEnterFrame);
		}
 
		private function onEnterFrame(e:Event):void {
			if (_mouseDown) {
				_dragField.x -= (mouseX - _prevX);
				_dragField.y -= (mouseY - _prevY);
				_prevX = mouseX;
				_prevY = mouseY;
			}
		}
 
		private function onMouseUp(e:MouseEvent):void {
			_mouseDown = false;
		}
 
		private function onMouseDown(e:MouseEvent):void {
			_prevX = mouseX;
			_prevY = mouseY;
			_mouseDown = true;
		}	
	}
}
__________________
Ко мне можно и нужно обращаться на ты)

Старый 05.06.2014, 12:57
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 4  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Цитата:
Нужно фиксировать предыдущее положение мыши, и смотреть на сколько пикселей изменились координаты сейчас. И вот уже эти числа реверсировать. Общая идея:
Так о том и речь, алгоритм то я писать не стал. P.s. - move побыстрее будет )
__________________
Марк Tween

Старый 05.06.2014, 13:04
LifeIsRhythm вне форума Посмотреть профиль Отправить личное сообщение для LifeIsRhythm Найти все сообщения от LifeIsRhythm
  № 5  
Ответить с цитированием
LifeIsRhythm
[+1 22.07.14]
[+4 12.08.14]
[+1 09.02.15]

Регистрация: May 2014
Сообщений: 182
Цитата:
move побыстрее будет )
Плюс event.updateAfterEvent();

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
move побыстрее будет )
Чем?
Цитата:
Плюс event.updateAfterEvent();
Ну да, конечно) Перерисовываем весь экран после каждого незначительного движения курсора. Крутяк
__________________
Ко мне можно и нужно обращаться на ты)

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

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
Цитата:
Сообщение от caseyryan Посмотреть сообщение
Чем?
Ещё тем, что не двигаем лишний раз объект, когда мышь на месте)

Старый 05.06.2014, 14:09
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 8  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
caseyryan - Кость , да всем. Не придумывай вешать на EF мышиные события, это не по советски
__________________
Марк Tween

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Не придумывай вешать на EF мышиные события, это не по советски
А где ты у меня такое увидел?
Не, тут EnterFrame лучше. Во-первых можно не двигать объект каждый раз, достаточно маленькую проверку ввести на изменение координат. Не изменились - не двигаем, доп. условие к if оператору, а во-вторых кто вообще двигает фон строго по движению мышки? В реальных приложениях это смотрится убого. Я показал ему лишь общую идею, но в реальном приложении сюда можно прикрутить плавное затухание, к примеру и/или плавный разгон, ну или эластичное движение как в твинах. Да и многое другое можно делать в этом же обработчике, тех же персонажей перемещать. Так что не надо тут приклеивать свой MouseMove) В его обработчике не обсчитаешь все вышеперечисленное.
__________________
Ко мне можно и нужно обращаться на ты)

Старый 05.06.2014, 14:16
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 10  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Цитата:
Сообщение от caseyryan Посмотреть сообщение
Чем?

Ну да, конечно) Перерисовываем весь экран после каждого незначительного движения курсора. Крутяк
Не перерисовываем, если нет updateAfretEvent().
Перерисовываем после Event.RENDER.
Flow такой.
Код:
MouseEvent.MOVE
MouseEvent.MOVE
....
MouseEvent.MOVE
Event.ENTER_FRAME
Event.FRAME_CONSTRUCTED
Event.EXIT_FRAME
Event.RENDER
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

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

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

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


 


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


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