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

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

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

Регистрация: Dec 2010
Сообщений: 177
По умолчанию Реализация своего курсора без функции updateAfterEvent()

Для реализации "своего" курсора, использую нижеуказанный код, но по определенным причинам мне нужно обойтись без ф-ии
e.updateAfterEvent(); (в некоторых дебаг версиях плеера fps падает до 5, хотя в релизной версии вроде все норм).

В событии используется ф-я e.updateAfterEvent(), чтобы клип-курсор плавно двигался за скрытым системным курсором, если убрать данную ф-ю, то начинается отставание клипа-курсора, что выглядит очень плохо.

Если ли решение плавности передвижения без использования updateAfterEvent().

Код AS3:
rootDisOb.removeEventListener(MouseEvent.MOUSE_MOVE, MouseMove);
 
public function MouseMove(e:MouseEvent):void
{
   visual.x = rootDisOb.mouseX;
   visual.y = rootDisOb.mouseY;
 
   e.updateAfterEvent();
}

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
а вот эта тема уже не актуальна?

вообще, нужно отказаться от mouseMove события и перерисовывать положение курсора по enterFrame в общем обработчике.
Я для этих целей обычно пишу статический класс типа CursorManager в нем создается экземпляр курсора и в методе update курсор переставляется в нужное положение.
Код AS3:
public static function update():void {
     myCursor.x = stage.mouseX;
     myCursor.y = stage.mouseY;
}
update дергается по энтерфрейму из любой точки приложения, где есть обработчик enterFrame. У меня это как правило тоже отдельный класс типа Action
updateAfterEvent() принудительно вызывает перерисовку всего контента в окне флеш плеера, что очень накладно в плане производительности, если вызов этой функции происходит часто. А по mouseMove так и будет

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

Регистрация: Feb 2009
Адрес: Гы...поди, найди!
Сообщений: 853
Записей в блоге: 1
Попробуйте использовать системный курсор:
Код AS3:
Mouse.registerCursor()
В любом случае производительность в debug FP всегда будет ниже чем в обычном. Почему Вас вообще волнует производительность в debug плеере? Не стоит расчитывать на то, что вашу игру/приложение будут использовать в дебаг флешке (а если и будут, то это их личные проблемы), потомучто у большинства пользователей стоит обычный плеер. Если же Вам не удобно программировать и тестить флешку, то либо закоментируйте эту строку на время разработки, либо (что лучше) используйте условную компиляцию.
__________________
http://www.chessmax.ru

Старый 13.08.2012, 11:57
Alexmody вне форума Посмотреть профиль Отправить личное сообщение для Alexmody Найти все сообщения от Alexmody
  № 4  
Ответить с цитированием
Alexmody

Регистрация: Dec 2010
Сообщений: 177
caseyryan
а вот эта тема уже не актуальна? - да, но решил пойти несколько другим путем отказаться от накладной ф-ии updateAfterEvent(), потому и создал новую тему.

>>вообще, нужно отказаться от mouseMove события и перерисовывать положение курсора по enterFrame в общем обработчике.
Интересно, а как на практике, перерисовка курсора в enterFrame дает плавность передвижения (эффект отставания клипа-курсора исчезает)?
Upd: попробовал на практике (заменить mouse_move на enter_frame), при макс 31 fps в игре, отставание и дерганье своего курсора сильно заметны.

Inet_PC
>>В любом случае производительность в debug FP всегда будет ниже чем в обычном.
Потому что, при вызове updateAfterEvent() fps падает с 31 до 3-5 (если своим курсором по экрану быстро водить), в релизной версии нет падения даже на 1 fps. Более того, я потестил в некоторых старых и новых версиях оконного дебаг плеера, этого бага нет, все также работает, как в релизной версии.


Последний раз редактировалось Alexmody; 13.08.2012 в 12:12.
Старый 13.08.2012, 14:43
Silicium вне форума Посмотреть профиль Отправить личное сообщение для Silicium Найти все сообщения от Silicium
  № 5  
Ответить с цитированием
Silicium
 
Аватар для Silicium

Регистрация: Sep 2010
Адрес: Ростов-на-Дону
Сообщений: 369
Во флексе, не помню как, можно назначать классы для курсоров. Через CursorManager, что-ли. Найду у себя - напишу подробнее.

Старый 13.08.2012, 19:17
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 6  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Для версии флешплеера выше 10.3 и курсоров размером меньше 32x32 можно использовать системный курсор, тогда плавность его перемещения вообще не будет зависеть от fps (анимированный тоже поддерживается)
Как выглядит применение системного курсора: http://vk.com/app3030551

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

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

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


 


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


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