forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Blitz3D (http://forum.boolean.name/forumdisplay.php?f=45)
-   -   Комбинация клавиш (http://forum.boolean.name/showthread.php?t=7423)

viper86 06.12.2008 11:35

Комбинация клавиш
 
Всем привет! Подскажите пожайлуста, как можно в блитце задавать комбинации клавиш? Например вперед, впред+пробел или А, A+D, S. То есть как в файтингах. Заранее спасибо.

FrankH 06.12.2008 21:13

Ответ: Комбинация клавиш
 
If KeyDown(KEYFWD1) And KeyDown(KEYDWN1) Then...

viper86 08.12.2008 10:17

Ответ: Комбинация клавиш
 
Нет, не просто 2 клавиши вместе, а последовательность, например для удара ножницами игрок нажмёт вперёд, а потом вперёд+А.

Spiderman 08.12.2008 11:30

Ответ: Комбинация клавиш
 
Необходимо запоминать ASCII код нескольких последних нажатых клавиш и выполнять проверку в цикле

Пример
Код:

if (key(0)=57 and key(1)=31 and key(2)=33) then...

где key() массив для нажатых клавиш


viper86 08.12.2008 12:03

Ответ: Комбинация клавиш
 
Цитата:

Сообщение от Spiderman (Сообщение 91849)
Необходимо запоминать ASCII код нескольких последних нажатых клавиш и выполнять проверку в цикле

Пример
Код:

if (key(0)=57 and key(1)=31 and key(2)=33) then...

где key() массив для нажатых клавиш


Спасибо огромное, то что нужно )))))

moka 08.12.2008 14:08

Ответ: Комбинация клавиш
 
Я бы сделал немного иначе. А именно, есть стандартные клавиши, к примеру Лево, Вверх, Вправо, Вниз, А, Б.
Далее, сделал бы маленький скриптик, где прописанны какие нада клавиши и т.п.
Затем список (правдо это на БМ просто, на б3д, массивом можно).
Далее что вносится в список, изначально все приёмы, производя некое действие, все приёмы где позиция(к примеру первое действие в приёме) и действие не совпадает, то удаляем из списка указатель на приём. Остаются естественно те которые возможны в реализации, далее если не истекло время, и сделано следующее действие, запускаем опять этот же процесс, уже проверяя на второе действие, и опять же отсекаем всё остальное.
Но тут возникает в драках 2 моммента, первое, это какраз приёмы быстрые, либо это серия ударов, это 2 разницы, т.к. приёмы быстрые, могут быть максимум из 3 последовательных действий, такой приём всегда начинается с направлений (движений), и заканчивается уже на кнопки ударов. Нужно это учитывать.
А также есть моммент такой, что приёмы идут как серия ударов, поэтому нужно также продумывать их, дабы они правильно пересикались и небыли с одинаковыми началами, но разными приёмами.. :)
Короче говоря, применение действий уже будет происходить сразу по началу выполнения комбинации (если это не быстрый приём).
Да и использовать в данном случае And, Or и сами прямые функции получения нажатия\зажатия кнопок, я настоятельно не рекомендую. Тут как никогда, нужно изначально привязывать всё к переменным, и использовать затем их, либо как обычно будут баги и т.п. с инпутом, которые в подобных ситуациях частенько всплывают, сбивая с толку.

impersonalis 08.12.2008 15:37

Ответ: Комбинация клавиш
 
Цитата:

Сообщение от Spiderman (Сообщение 91849)
Необходимо запоминать ASCII код нескольких последних нажатых клавиш и выполнять проверку в цикле

достаточно (и более удобно) scan-кодов

viper86 08.12.2008 17:35

Ответ: Комбинация клавиш
 
2MoKa Спасибо, твой способ обдумаю. Пока использую такой код (просто для понятия принципа)

If KeyHit(RP) And AnimSeq(player)=stoyka
Animate (player,3,1.3,punch1,transition)
combo1=1
combo1_time=MilliSecs()
EndIf

If combo1=1 And MilliSecs()-combo1_time<300 And KeyDown(RS) And Keyhit(RP) Then combo1=2
If combo1=2 And AnimTime(player)>25 combo1=0 Animate(player,3,0.5,punch2,transition)
If MilliSecs()-combo1_time>600 Then combo1=0,

где RP(Right Punch)=76 - кнопка Num5,
и RS(Right Step)=32 - кнопка D.

То есть, при нажатии клавиши RP идёт удар рукой(punch1) и если после неё в течении 300 мс нажато RS+RP идёт сильный удар с выпадом(punch2). Но вот в чём беда, второе событие KeyHit(RP) не срабатывает, а если вместо него написать keyDown:

If combo1=1 And MilliSecs()-combo1_time<300 And KeyDown(RS) And KeyDown(RP) Then combo1=2,

то комбо срабатывает сразу при нажатии RS+RP(combo1 сразу становится равное 2).

У кого то есть соображения на этот счёт?

moka 08.12.2008 17:45

Ответ: Комбинация клавиш
 
Цитата:

Тут как никогда, нужно изначально привязывать всё к переменным, и использовать затем их, либо как обычно будут баги и т.п. с инпутом, которые в подобных ситуациях частенько всплывают, сбивая с толку.
Повторюсь..

viper86 08.12.2008 18:10

Ответ: Комбинация клавиш
 
Цитата:

Сообщение от MoKa (Сообщение 91861)
Повторюсь..

А можешь пример хоть небольшой написать (или мой изменить), а то я не совсем понимаю, что ты имеешь ввиду.

moka 08.12.2008 18:35

Ответ: Комбинация клавиш
 
viper86, нелюблю хлебом кормить, а когда ленятся - нужно отсекать..
Код:

IKhA=KeyHit(..)

FrankH 08.12.2008 22:54

Ответ: Комбинация клавиш
 
Хм, не судите строго, но первое что пришло в голову: создаем эталоны типа
(код клавиши_1),(допуск времени до след. нажатия_1),(код клавиши_2),(допуск времени до след. нажатия_2)...
и помещаем их в массивы, далее создаем кеш(например типом, но может и массив покатит) и заносим туда каждое нажатие со сдвигом, после каждого сдвига сверяем с эталонами. Задержки можно поставить и константой если для джойстика. Ток насколько тормозно выйдет на Блитце незнаю..:dontknow:

viper86 09.12.2008 09:49

Ответ: Комбинация клавиш
 
Цитата:

Сообщение от MoKa (Сообщение 91864)
viper86, нелюблю хлебом кормить, а когда ленятся - нужно отсекать..
Код:

IKhA=KeyHit(..)

Спасибо, мне этого достаточно (я и сам люблю разбиратся). Я первый раз за помощью на форумы обратился, может кто подобное уже делал и знает, как это делать лучше. А так всё сам )))) (по хелпам и примерам естесно).

А вообще, большое спасибо всем, что помогаете. Я читаю много форумов про блиц, этот самый хороший.

moka 09.12.2008 14:36

Ответ: Комбинация клавиш
 
viper86, респект тебе за то что реально сам учишся - это лучший метод!
Задавай ещё вопросы, такие как этот, потому что если честно этот вопрос интерестен тем что он не глупый, и имеет несколько реализаций.
Драки пишешь?

viper86 10.12.2008 13:15

Ответ: Комбинация клавиш
 
Вложений: 1
Цитата:

Сообщение от MoKa (Сообщение 91892)
viper86, респект тебе за то что реально сам учишся - это лучший метод!
Задавай ещё вопросы, такие как этот, потому что если честно этот вопрос интерестен тем что он не глупый, и имеет несколько реализаций.
Драки пишешь?

Да, хочу написать драки типа Tekken. Но для начала пишу простенькую игру, где играешь человечком типа палочка-палочка-шарик (видео прикрепил), а против тебя куча противников. Игра на прохождение, немного рпг элементов (открытие ударов, увеличение здоровья и тд). Сразу писать нормальный файтинг не решился, сначала на маленьком поучусь )))))


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot