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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 28.12.2010, 15:17
passertm вне форума Посмотреть профиль Отправить личное сообщение для passertm Найти все сообщения от passertm
  № 1  
Ответить с цитированием
passertm
[+1 28.12.10]
[+1 29.12.10]
 
Аватар для passertm

Регистрация: Aug 2006
Сообщений: 107
По умолчанию нормальный драг во флеш

уже долгое время не могу реализовать нормальный драг во флеш.

чем плох стандартный startDrag stopDrag:
если предмет маленкий. взял предмет. помохал мышкой. предмет оказался не под мышкой. отпустил мышу. а предмет никак не отцепится. это совсем не смешно.

невозможно ограничить движение обьекта по пути есди путь не горизонтальная и вертикальная линия.


второе не так важно в данный момент для меня. но первое как то нужно решать.
уна одном сайте нашел предложения поставить stopDrag на событие ROLL_OUT но тогда чуть мышу дернул обьект отвалился.

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

Регистрация: Jan 2009
Сообщений: 1,651
Никогда не пользоваться startDrag stopDrag.
На зажатие вешать обработчик MOUSE_MOVE, по MOUSE_MOVE перемещать, на отжатие убивать обработчик.
__________________
мой пустой блог

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Цитата:
если предмет маленкий. взял предмет. помохал мышкой. предмет оказался не под мышкой. отпустил мышу. а предмет никак не отцепится. это совсем не смешно.
MOUSE_UP вешайте на на клип, а на stage.
Цитата:
невозможно ограничить движение обьекта по пути есди путь не горизонтальная и вертикальная линия.
В этом случае драг вообще не используется. Вешается MOUSE_MOVE и в зависимости от координат мыши высчитывается положение объекта.

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

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

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
Цитата:
На зажатие вешать обработчик MOUSE_MOVE, по MOUSE_MOVE перемещать, на отжатие убивать обработчик.
+1
либо MOUSE_MOVE, либо ENTER_FRAME, либо TIMER

Умом понять не могу, но в разных приложениях почему-то все по-разному происходит.
Бывает, что на MOUSE_MOVE возникает ощущение, что объект "не успевает" за мышкой, а по ENTER_FRAME нормально двигается.

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Цитата:
Бывает, что на MOUSE_MOVE возникает ощущение, что объект "не успевает" за мышкой, а по ENTER_FRAME нормально двигается.
MOUSE_MOVE срабатывает не сразу (не в тот же момент как мышка сдвинулась на пиксель), поэтому возникает такой эффект.

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

Регистрация: Jan 2009
Сообщений: 1,651
Слушатель MOUSE_MOVE вешается на stage. Чтобы MOUSE_EVENT был обработан сразу, нужно в нём выполнить mouseEvent.updateAfterEvent(), ну элементарные же вещи.
__________________
мой пустой блог

Старый 28.12.2010, 16:11
passertm вне форума Посмотреть профиль Отправить личное сообщение для passertm Найти все сообщения от passertm
  № 7  
Ответить с цитированием
passertm
[+1 28.12.10]
[+1 29.12.10]
 
Аватар для passertm

Регистрация: Aug 2006
Сообщений: 107
MOUSE_MOVE почему то не всегда посылается адекватно. логику не уловил, когда посылается а когда нет. возможно если после окончание обработки предыдушего события мышь не перемешалась, то событие не посылаются. в результате если пока обработчик обрабатывал мышька подвинется и остановится новое событие не будет вызвано. поэтому пришлось посадить это на таймер. а идея вешать MOUSE_UP на сцену плюс ловить ROLL_OUT очень полезной оказалось. спасибо.

Добавлено через 3 минуты
Цитата:
Сообщение от iflamberg Посмотреть сообщение
Слушатель MOUSE_MOVE вешается на stage. Чтобы MOUSE_EVENT был обработан сразу, нужно в нём выполнить mouseEvent.updateAfterEvent(), ну элементарные же вещи.
хм... очень познавательно. учту.

то что елементарно наверное да. только вот нормальной доки кроме api не нашел. вот и делаю методом тыка и разным мелким статьям)) и это еще додуматься нужно что, у mouseEvent может оказаться функция которая решит проблему.

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

Регистрация: Oct 2006
Адрес: Novosibirsk-Kaliningrad
Сообщений: 1,278
Отправить сообщение для terbooter с помощью ICQ Отправить сообщение для terbooter с помощью Skype™
я тоже методом startDrag никогда не пользуюсь.
Делаю что-то подобное
Код AS3:
private function onEnterFrame(e:Event):void {
			//TODO оптимизировать
			this.field.x = this.mouseX-this.clickPoint.x;
			this.field.y = this.mouseY-this.clickPoint.y;
 
			if (this.field.x > 0) {
				this.field.x = 0;
			}
			if (this.field.y > 0) {
				this.field.y = 0;
			}
 
			if (this.field.x < this.stage.stageWidth - this.field.width) {
				this.field.x = this.stage.stageWidth - this.field.width;
			}
			if (this.field.y < this.stage.stageHeight - this.field.height) {
				this.field.y = this.stage.stageHeight - this.field.height;
			}
 
		}

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

блогер
Регистрация: Sep 2008
Адрес: Менск
Сообщений: 586
Записей в блоге: 1
Отправить сообщение для incvizitor с помощью Skype™
Цитата:
уна одном сайте нашел предложения поставить stopDrag на событие ROLL_OUT но тогда чуть мышу дернул обьект отвалился.
Можно так, хотя не всегда прокатит:

Код AS3:
stage.addEventListener(MouseEvent.MOUSE_UP,onMouseUp);
 
function onMouseUp(e:MouseEvent):void{
   obj.stopDrag();
}
__________________
ranga

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

Регистрация: Oct 2006
Адрес: simferopol -> kyiv
Сообщений: 2,161
Отправить сообщение для Fernando Costa с помощью ICQ
у startDrag есть второй параметр, который ограничивает область драгания
__________________
: M F N W :

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

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

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


 


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


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