Просмотр полной версии : курсор
:confused:
Как поменять стандартные курсоры флэша (стрелку и руку) на свои? Желательно сделать это с помощью Action Script, ну а если нельзя с помощью Action Script, то скажите другой способ... Заранее спасибо...
создай клип назови его к примеру myCursor в него запихни свою картинку
на таймлайне напиши:
Mouse.hide();
myCursor.onMouseMove = function() {
this._x = _xmouse;
this._y = _ymouse;
updateAfterEvent();
};
А updateAfterEvent тут зачем? Чтобы ноги у машины гнулись?:)
Пасиба за пример...
Еще какие-нибудь предложения у кого-нибудь имеются?
а ты про updateAfterEvent можешь подробнее рассказать? я его ниразу не использовал.
:) и то правда... больше не буду исправлюсь :rolleyes:
Antares c чего ты решил что у машины будут гнуться ноги?, updateAfterEvent помогает сделать движение более плавным и все.
я на это и расчитывал..
но не будет ли это влиять на скорость / нагрузку на "машину" ?
я просто не тестировал при больших мувиках.
Специально для Antares'a провел опыт на производительность.
см. рисунок,
сверху:
красный цвет с updateAfterEvent,
зеленый - перекомпиливаю проект,
синий - без updateAfterEvent.
заметили разницу ? я лично никакой, при использовании updateAfterEvent у меня даже "пики" закрузки были ниже на 1-2%.
условия тестирования - загружена картинка, над ней рисованый курсор в виде лупы (линии, градиет, просто заливка)
ну еще забыл сказать - курсором елозил довольно быстро, и настойчиво для каждого примера%))
спасибо за поставленные опыты!
Antares c чего ты решил что у машины будут гнуться ноги?, updateAfterEvent помогает сделать движение более плавным и все.
Какое событие у нас вызывается чаще всего? Чаще, чем onEnterFrame? Правильно, onMouseMove.
Что делает updateAfterEvent? Верно, вызывает внеплановую прорисовку.
А теперь подумай, что будет, если совместить эти 2 вместе в более-менее сложном приложении.
__i, да делай, как посчитаешь нужным. Ты только не забывай, что ты других учишь :)
ну опыт смотрел ?, попробуй сам, Диспечер задач есть в любой винде начиная с 2000. заметь - график без updateAfterEvent даже выше чем с ним, какой вывод?. могу как нить на досуге промоделировать "более-мение сложное" приложение? и показать результаты.
Какое событие у нас вызывается чаще всего? Чаще, чем onEnterFrame? Правильно, onMouseMove.
Это событие вызываеться именно когда двинулась мышь, а не все время, поэтому это не факт что оно вызываеться чаще чем onEnterFrame.
давай поспорим на ту шапку которую не дохавали в разделе Advanced, что разници не какой?
так, ладно обычную стрелку у меня заменить получилось, ну а как быть с "рыкой" и текстовым курсором...
И, кстати, Antares, ты прав. У меня сложном приложении с updateAfterEvent комп немного притормаживает. Может все-таки есть какие-нибудь другие способы?
Подскажите плиз. Я думаю, эта тема будет интересна для многих.
(смеется)
Вывод простой, я думаю -- раз в год и палка стреляет. Или ты намекаешь на то, что чаще перерисовывая мы УВЕЛИЧИВАЕМ производительность? ;)
Рука убирается в одну строку:
myMovieClip._useHand = false;
Текстовый курсор без Большого Геморроя не убрать. Да и зачем уго убирать, ума не приложу.
Я ниначто не намекаю, просто прошу помощи.
Если можешь чем-нибудь помочь, буду рад
давай поспорим на ту шапку которую не дохавали в разделе Advanced, что разници не какой?
Давай я просто признаю, что ты прав, и ты не будешь нервничать?
Публично признаю: пользователь __i только что доказал недоказуемое, провея тест. Я неправ. Используйте updateAfterEvent() везде, где только можно (этого я вам не советовал :D ).
Я тебе могу словами описать:
чтобы убрать курсор, надо текстовое поле заменить на свое. Буквы прибавлять, слушая клавиатуру и аттача мувиклипы. Стиль текста можно реализовать, думаю, понятно как. Чтобы сделать удаление -- делаем буфер и ловим бэкспейс. С делитом сложнее -- надо определять позицию.
А вот выделение... можно сделать выделение с помощью TextSnapshot. Но будут "прорези".
И вообще, овчинка выделки никак не стоит
как убрать руку, я знаю, а как ее заменить на другой курсор(не как стрелка).
В общем мне нужно заменить все курсоры флэша на свои, а текстовый курсор мне нужно убрать потому что при наведении стрелки на текст, он (текс... курсор) появляется над стрелкой.
Или скажи как скрыть стрелку при наведении курсора на текст, но текс... курсор при этом должен отображаться
Так сделайт текстовое поле невыделяемым и все. А все прочее тебе уже сказали.
Если просто скрыть -- лови момент наведения на текст и убирай мувик, служащий тебе курсором.
Все, я ушел работать дальше.
а как поймать этот самый момент?
а насколько важно те поменять именно текстовый курсор?, это не очень нормальный тон %(, пользователь всегда хочет видеть что это поле в который можно копировать выделять текст и часто ориентируеться на курсор.
Тут гдето я видел вариант через стили, устанавливают но никогда не пробывал не уверен
через стили нельзя%((
Flash Player supports a subset of properties in the original CSS1 specification
а там нету понятия курсор %(
Я както давно подымал на это форуме тему о курсорах, как тогда мне объяснили нельзя использовать стандартные виндовые курсоры кроме как рука, стрелка, поле редактирования. нужно все рисовать ручками. Как бороться текстом, я думаю никак %(
мне ввобще не важно менять текстовый курсор, просто при наведении мыши на текст над мышой появляется текстовый курсор(см. рисунок), а мне нужен над текстом просто текстовый курсор.
как этого добиться?
проверяй координаты, текстовое поле имеет _x, _y, _width, _height
Лишние строки засоряют код. Надо стремится к его упрощению и минимизации.
to __i
Это очень долго будет. У меня в файле около 30 полей, и все в разных фреймах, с разными параметрами.
А какой еще способ смены курсора есть, ты не знаешь. Если знаешь, посоветуй.
А я вообще в АС слабоват. Не знаешь где взять эл. учебник по нему?
Лишние строки засоряют код. Надо стремится к его упрощению и минимизации.
На счет лишних строк тебя никто не спрашивал, лучше бы помог разобраться с темой
1. Никаких эл. учебников на тему. Книги Колина Мука -- единственный способ выучиться, а не просто "знать синтаксис".
2. 30 полей в 30 фреймах -- значит, структура не продумана вообще. Или у тебя 30 состояний в приложении?
3. ПроФикс, получи плюс за неуважение к участнику форума undeddy. То, что он найфлеймил, не дает тебе права выеживаться.
Я и не думал выеживаться...
И мысли такой в голову не приходило, я просто попросил человека помочь нам раскрыть эту тему.
А насчет непродуманной структуры ты неправ. Структура продумана.
Я делаю Autorun оболочку для CD, а следовательно в каждов фрейме описание какой-либо программы, кнопка "установить", "кряк" и т.п. Поэтому и получается такая структура.
Ну, если действительно столько состояний, то во вопросов нет.
ЗЫ: попросил ты клева. Эй ты слыш нука реши мне задачу че нет ваще казел да!?
как вариант (убрать рукотворный курсор над текстфилдами):
смотрим хиттест курсора с объектами под ним, если не мувиклип, то прячемся..
в аттаче упрощенный пример (смотрим только _parent),но если надо можно ведь и все уровни просмотреть..
Вообще, если ты делаешь авторан, и тебе некритична невозможность пользователя скопировать содержимое текстового поля -- отключи опцию Selectable у них. И всё решится само собой.
З.Ы.:
Э-эх... Тест.. еще один. На предмет частоты вызова событий onEnterFrame и onMouseMove.
частота кадров 12: совершая максимально скоростные пробеги мышью, получил срабатывание onMouseMove 7 раз против одного onEnterFrame;
частота кадров 24: при тех же телодвижениях onMouseMove вызывается 4 раза, а onEnterFrame один;
ну, и на закуску (частота кадров 100): максимум, что у меня получилось, -- чередование вызовов onEnterFrame и onMouseMove.
Вывод: уж лучше onEnterFrame :D если это возможно.
Силин, не почему ты так искусно отучаешь людей думать? ;) Я до последнего верил, что догадается...
to Antares
Не смешно...
Ладно, я понял свою ошибку, впредь обязуюсь никого не унижать(такого я никогда и не делал, многие со мной согласятся) и оскорблять на форуме.
И, кстати, где взять эти "Книги Колина Мука"?
А какие-нибудь другие способы смены курсора (стрелки) кто-нибудь знает?
А мне очень нужна опция Selectable, т.к. некоторые поля содержат серийные ключи к прогам
Вывод: уж лучше onEnterFrame :D если это возможно.
Зависит от частоты вождения мышью.
to Antares
А какие-нибудь другие способы смены курсора (стрелки) кто-нибудь знает?
Походу дела, других способов просто нет.
Кстати, предложенный способ достаточно хорош, и, если тебя неустраивает только невозможность избавиться от стандартного "текстового" курсора, то, на мой взгляд, поиски другого просто не стоят свеч.
1. Нет других способов.
2. Сделай поля статическими, статический текст, вопреки мнению многих, можно выделять. Программно.
ЗЫ -- если на английском читаешь, пропиши в профиле IM или мыло.
Доминатор, вы получаете устное предупреждение, а ваш пост удален. 4й пункт правил раздела.
Elodreid
07.01.2006, 17:55
А чем startDrag не подходит для эфекта курсора?
Mouse.hide();
kursor.startDrag(true);
Вот как можно сделать исчезновение курсора
function m1(f:Number) {
if (f == 1) {
kursor._visible = true
}
if (f == 0) {
kursor._visible = false
}
}
На элементы вешаем
on (rollOver) {
m1(1);
}
on (rollOut) {
m1(0);
}
Только Антарес, что-то говорил про то что on (ClipEvent) плохо делать, но не знаю я неделю (макс) как флеш начал изучать, в хелпе прочел :))
Пользуемся тэгом [ code ] ;) Хотя спасибо, что попытался хоть как-то сохранять форматирование, но цветовая гамма для php не учитывает цвет фона...
Elodreid
08.01.2006, 01:24
Ок! ;)
Вывод: уж лучше onEnterFrame :D если это возможно.
Не удержался тоже от теста, люблю когда за словами стоят факты!
Ну собственно вот как я пытался "пдогнуть ноги" своей машинки, которая не из самых сильных.
Пишем скриптик который посчитает среднее время проходящее между событиями:t = 5000;
tm = new Array();
p = getTimer();
_root.onMouseMove = function() {
if (getTimer()<t) {
tm.push(getTimer()-p);
p = getTimer();
} else {
var a = 0;
for (i=0; i<tm.length; i++) {
a += tm[i];
}
trace(a/i);
_root.onMouseMove = null;
}
//updateAfterEvent();
}; запускаем скрипт и водим мышкой. Через 5 сек получаем среднее время (у меня 0.0082-0.0083 сек в среднем после нескольких запусков)
запускаем еще раз и водим мышкой быстро быстро. Проделал это несколько раз, каждый раз старался быстрее,
средний результат плавал от 0,0081 до 0.0083
Теперь в скрипте раскомментируем updateAfterEvent(), и проделываем все сначала. В реультате при плавном перемещении
0.0081-0.0083 с, при быстром 0.0082-0.0083 с. Это пока не о чем не говорит, т. к. мы не утруждали процессор перерисовкой.
Надо повесить курсор.
t = 5000;
tm = new Array();
_root.attachMovie("kursor", "kursos", 1);
p = getTimer();
_root.onMouseMove = function() {
if (getTimer()<t) {
kursos._x = _xmouse;
kursos._y = _ymouse;
tm.push(getTimer()-p);
p = getTimer();
} else {
var a = 0;
for (i=0; i<tm.length; i++) {
a += tm[i];
}
trace(a/i);
_root.onMouseMove = null;
}
//updateAfterEvent();
};я взял jpg 300kb. - интервал возрос до 0.010 с при выключенном update и 0.015 с при включенном, причем изменение скорости
движения мыши уже менее заметно влияло на результат.
Я пошел дальше в попытках "подкосить ноги" моей машинке и совершил с моим и так тяжелым курсором TraceBitmap на 20000 curves.
Вот тут при апдейте интервал возрос до 0.06 с, против 0.03 с без апдейта. На этом решил эксперимент прервать, так как уже получил для себя вывод. Можно смело говорить об увеличении нагрузки на процессор при использовании updateAfterEvent, тока вот от использования его я бы отказываться не стал. Не думаю, что на маус мув придеться вешать какие-то супермегациклы или мега
перерисовки, которые бы подкосили машину, а вот если отказаться от апдейта, то это будет сразу заметно: курсор, какой бы он ни был, будет двигаться рывками. :eek:
Э-э-э-эххх, лблю эксперименты!! :p
Не думаю, что на маус мув придеться вешать какие-то супермегациклы или мега
перерисовки, которые бы подкосили машину, а вот если отказаться от апдейта, то это будет сразу заметно: курсор, какой бы он ни был, будет двигаться рывками. :eek:
Да ради бога. Счастлив тот, кто с оптимизацией не знаком. Вы можете также пользоваться сценами и onClipEvent -- мое дело сказать, что к чему.
Да, экспериментаторы -- добавьте фильтры в свои эксперименты ;)
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.