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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 09.04.2009, 16:55
IDimitry вне форума Посмотреть профиль Найти все сообщения от IDimitry
  № 1  
Ответить с цитированием
IDimitry
Banned
[+5 23.05.09]
[+1 23.05.09]

Регистрация: Mar 2009
Сообщений: 93
По умолчанию Вопросы по перетаскивание сложного мувика

Давно столкнулся с этим вопросом, но отставил "на потом" мелкие вопросы наподобие этого. Вот, пришло время и до них ...

1. В библиотеке находятся мувики, преобразованные из битмепа круглой (овальной) формы. Они программно добавляются на сцену и их можно перетаскивать. Само собой, раз мувик построен на битмепе, то его можно "брать" как за видимые части (круг, овал), так и за углы, что, собственно, нелогично и не очень удобно.
Для себя я вижу несколько направлений реализации механизма отлова нажатия мыши на видимой части:
- проверка на прозрачность пиксела мувика, на котором сделан клик;
- задать для мувика свойство hitArea, которое будет указывать на скрытый спрайт с векторным шаблоном, повторяющим форму видимой части перетаскиваемого мувика;
- задать свойство mask для мувика и обрабатывать его события (эта идея самая сырая и схожа с предыдущей, так как также надо рисовать векторный шаблон-маску, только инвертированную - на невидимые части).

Наверняка кто-то сталкивался с подобной реализацией. По какому пути лучше пойти? - Особенно в плане быстроты анализа клика. А также, возможно, есть другой (другие) способы "борьбы" с этой проблемой.

2. При перетаскивании мувика он двигается рывками, как бы постоянно доганяя курсор мыши. С одной стороны, перетаскиваемые мувики очень малы - почему бы им не перерисовываться быстрее, да и комп, где тестируется, достаточно мощный, а с другой стороны - бекграунд флешки - это сплошной битмеп, с чем, возможно, можно связать неплавность движения мувика.

Можно ли побороть это рывчатое движение? - Возможно, надо просто делать мои мувики на время перетаскивания курсорами мыши?

3. Следствие первых двух, а также мой недавний переход на AS3 с его "слегка измененной" событийной моделью.
Пример: мувики находятся друг над другом так, что невидимый уголок верхнего находится над нижним. При нажатии на уголок верхнего событие все равно должен получить нижний мувиклип. Я так понимаю, что при задании hitArea все и так заработает (событие фактически получает шаблон, а на нем клика не было), а вот если через анализ прозрачности, то надо "передать клик" нижнему мувику - так сказать, выполнить диспетчеризацию события (?). Как на практике это делается?

Спасибо за советы.

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

Регистрация: Jul 2007
Адрес: Москва
Сообщений: 996
1. Зависит от задачи.
Если нужно динамически, то либо при клике проверять на прозрачность, либо прграммно рисовать маску.
Иначе, можно в библиотеке сделать Break Apart и вырезать ненужные куски.
2. У Вас что-то грузит процессор, ищите что.
3. Проблему решит пункт 1.
__________________
Griver

Старый 09.04.2009, 21:20
IDimitry вне форума Посмотреть профиль Найти все сообщения от IDimitry
  № 3  
Ответить с цитированием
IDimitry
Banned
[+5 23.05.09]
[+1 23.05.09]

Регистрация: Mar 2009
Сообщений: 93
Н-дааа, многовекторность - хорошая штука. Когда зацикливаешься на чем-то одном, о других вещах просто забываешь.
Есть простая старая вещь - маска, которую можно просто нарисовать в мувике ручками (для окружности или овала никаких проблем). И это снимает все проблемы с перетаскиванием.
Правда, неплавность перетаскивания остается, но мне подсказывают, что это именно из-за бекграунда, как я и предполагал. Хотя бекграунд не очень сложный и большой, а перетаскиваемый мувик очень мал, но перерисовка все равно происходит недостаточно плавно.

Извините, вопрос решен собственными силами.

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

Регистрация: Dec 2008
Сообщений: 88
хм та же проблемма с hitTestObject
Банально нарисовав линию(по диагонали) получаю true при пересечении квадратной области redraw.
может кто нибудь подскажет как это можно обойти??
маска не помогает

Добавлено через 24 минуты
тфу

hitTestPoint(x,y,true) решение проблеммы но вот правда как быть в случае пересечения двух сложных тел с точностью до пиксела это интересно


Последний раз редактировалось wer32; 10.04.2009 в 00:05.
Старый 10.04.2009, 16:24
Distorn вне форума Посмотреть профиль Отправить личное сообщение для Distorn Найти все сообщения от Distorn
  № 5  
Ответить с цитированием
Distorn

Регистрация: Aug 2005
Сообщений: 35
По поводу рывков: какой у тебя frameRate? попробуй его поставить побольше.

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

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
updateAfterEvent, cacheAsBitmap, повысить FPS.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

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

Регистрация: Jul 2008
Адрес: Smolensk
Сообщений: 124
Отправить сообщение для xpymbl4 с помощью ICQ Отправить сообщение для xpymbl4 с помощью Skype™
Вот пример плавного перемещения (описано в книге ActionScript 3.0 Сборник рецептов, авторы Джои Лотт, Деррон Шалл и Кейт Питерс. Глава 6.9). Обратите внимание: fps (во флеше Frame rate) не имеет значения.
Думаю, точность порядка 10 миллисекунд обеспечивается точно.
Примечание: если таскаемый MovieClip к примеру содержит поле для ввода текста - уже наблюдаются баги. Необходима доработка.

Ваш таскаемый MovieClip: myMc. (Область таскания не обозначена).
Код:
Код AS3:
package {
    import flash.display.*;
    import flash.events.*;   
 
	public class Main extends MovieClip {
		var draggedObject:DisplayObject;
		var offsetX:Number;    
		var offsetY:Number;
 
		public function Main() {
			myMc.addEventListener(MouseEvent.MOUSE_DOWN, startDragging);
			myMc.addEventListener(MouseEvent.MOUSE_UP, stopDragging);			
		}		
 
		function startDragging(event:MouseEvent):void    {    
			draggedObject = DisplayObject(event.target); 
			offsetX = event.stageX - draggedObject.x;    
			offsetY = event.stageY - draggedObject.y;       
			stage.addChild(draggedObject);      
			stage.addEventListener(MouseEvent.MOUSE_MOVE,  dragObject);   
		}       
		function stopDragging(event:MouseEvent):void    {    
			stage.removeEventListener(MouseEvent.MOUSE_MOVE,  dragObject);    
		}
		function dragObject(event:MouseEvent):void {
			draggedObject.x = event.stageX - offsetX;
			draggedObject.y = event.stageY - offsetY;
			event.updateAfterEvent();
		}
	}
}
__________________
круглое тащим, квадратное катим


Последний раз редактировалось xpymbl4; 11.04.2009 в 08:01.
Старый 11.04.2009, 14:51
IDimitry вне форума Посмотреть профиль Найти все сообщения от IDimitry
  № 8  
Ответить с цитированием
IDimitry
Banned
[+5 23.05.09]
[+1 23.05.09]

Регистрация: Mar 2009
Сообщений: 93
Да, к сожалению, встроенный флешевский драг перерисовывает перетаскиваемый объект по фреймрейту, отсюда и дерганья. Не всегда получается сильно увеличить его, да и даже 100 кадров в секунду не дают абсолютно плавное движение, которое достигается отработкой MOUSE_MOVE. Спасибо, прийдется-таки идти по этому пути.

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

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

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


 


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


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