Суббота, 23 Ноября 2024, 11:27

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Анимация движения курсора
KamAKДата: Среда, 27 Марта 2013, 19:41 | Сообщение # 1
был не раз
Сейчас нет на сайте
Здравствуйте!
Дело в том, что я делаю игру в ГМ на подобие тира. Так вот, все уже сделано кроме анимаций разрушений. Но основную проблему составляет анимация движения курсора (он же прицел). Надо чтобы он когда стоит на месте, то имеет один вид (1), когда двигается влево - другой вид (2), вправо - третий вид (3).
Причем, когда двигается, допустим, влево-вниз или влево-вверх (по диагоналям короче), то должен иметь вид (2). А когда по правым диагоналям, то вид (3). Когда двигается строго вверх или вниз, то вид (1). Конечно я все так подробно описал, возможно выглядит сложно (для меня по крайней мере smile ), но просто не знаю куда уже обратиться, в интернете не нашел подобных уроков или исходников.
Помогите, кто чем сможет, пожалуйста. Буду рад если кто-нибудь напишет инструкцию и код к такой анимации.
Заранее спасибо! smile
PS: Забыл добавить, надо чтобы при выстреле (нажатии ЛКМ) курсор тоже сменял свой вид (1/2/3) на другой вид (4).
Курсор (прицел) двигается с помощью мыши конечно.


Сообщение отредактировал KamAK - Среда, 27 Марта 2013, 20:42
RandallДата: Четверг, 28 Марта 2013, 02:14 | Сообщение # 2
участник
Сейчас нет на сайте
В create: xprev=x;yprev=y. Это бэкап предыдущих координат объекта.

В степе сравниваем текущий x и y с xprev yprev и меняем спрайт в зависимости от характера изменений.

Для движения по правым диагоналям например: if x>xprev ...
По левым if x<xprev ...
На месте if x=xprev and y=ypev ...
Для четко вверх или вниз нужен некоторый допуск, например в пиксель (так как четко провести мышью вверх или вниз вряд ли получится): if abs(x-xprev)<=1 ...
и так далее.

После всех проверок, в самом конце степа освежаем xprev=x;yprev=y

Вот и всё.


1. Adventure Mouse - мини-аркада про мыш и его друга сыр
2. Герои Реконструкции и Страйкбола - тематическая пошаговая стратегия
3. Dangerous Dave 5: Fansequel - трибьют на Dangerous Dave
Всё здесь http://zvizdez.ru/download.php?list.1


Сообщение отредактировал Randall - Четверг, 28 Марта 2013, 02:23
KamAKДата: Четверг, 28 Марта 2013, 21:54 | Сообщение # 3
был не раз
Сейчас нет на сайте
Цитата (Randall)
В create: xprev=x;yprev=y. Это бэкап предыдущих координат объекта. В степе сравниваем текущий x и y с xprev yprev и меняем спрайт в зависимости от характера изменений. Для движения по правым диагоналям например: if x>xprev ... По левым if x<xprev ... На месте if x=xprev and y=ypev ... Для четко вверх или вниз нужен некоторый допуск, например в пиксель (так как четко провести мышью вверх или вниз вряд ли получится): if abs(x-xprev)<=1 ... и так далее. После всех проверок, в самом конце степа освежаем xprev=x;yprev=y Вот и всё.


Спасибо большое! smile Обязательно попробую сделать!

Добавлено (28.03.2013, 17:59)
---------------------------------------------
Но вот вопрос.
я пишу так:

if x>xprev {sprite_index=r};
if x<xprev {sprite_index=l};
if x=xprev and y=yprev {sprite_index=rl};
xprev=x;yprev=y

но ничего не пороисходит, спрайт rl не меняется на другой r или l.
может я с самого начала что-то не так делал, когда в create создал событие Set mouse to rl ?? А как тогда быть?

Добавлено (28.03.2013, 19:22)
---------------------------------------------
Все, теперь получилось, когда заменил событие Set mouse to кодом
Cursor.x=mouse_x
Cursor.y=mouse_y

после этого анимация стала действовать!
Огромное спасибо за совет! biggrin

Добавлено (28.03.2013, 21:54)
---------------------------------------------
А теперь еще один вопрос... Надеюсь последний по этой теме smile

Как сделать так, чтобы смена скриптов, которую я сделал до этого, происходила с некоторой задержкой, например в одну секунду. Просто инчае при малых перемещениях курсора анимация начинает часто переключаться, выглядит это как дергание. Когда мышкой делаю большие перемещения, то все нормально без дерганий. А может есть какие-то еще надежные способы избежать дерганий анимации при малых перемещениях? Пробовал что-то сам фантазировать, но ничего не вышло sad

Если кто опять поможет буду очень благодарен! smile

RandallДата: Четверг, 28 Марта 2013, 23:39 | Сообщение # 4
участник
Сейчас нет на сайте
Стандартная скорость комнаты - 30 шагов в секунду.
В create объявляем счетчик (можно аларм сделать, можно и счетчиком) count=0
При смене спрайта: if count=0 {меняем спрайт; count=30}
if count>0 {count-=1}

таким образом, пока не пройдет секунда после очередной смены спрайта, новых смен не будет


1. Adventure Mouse - мини-аркада про мыш и его друга сыр
2. Герои Реконструкции и Страйкбола - тематическая пошаговая стратегия
3. Dangerous Dave 5: Fansequel - трибьют на Dangerous Dave
Всё здесь http://zvizdez.ru/download.php?list.1


Сообщение отредактировал Randall - Четверг, 28 Марта 2013, 23:39
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг