StarLLaythe | Дата: Пятница, 28 Июня 2019, 20:40 | Сообщение # 1 |
был не раз
Сейчас нет на сайте
| Помогите, пожалуйста, разобраться. У меня есть переменная, скажем, n. Она может принимать значения от 1 до 8, значение зависит от нажатых клавиш, например, WASD, то есть, W, A, S, и D это одни 4 значения, а смежные сочетания типа WA и WD это другие 4 (как в движении в 8 возможных сторон, но мне эта заморочка не для движения).
Мне нужно, чтобы когда я отпускал клавиши, запоминалось значение, например, если я держал S и D, то когда я отпустил их обе (естественно не факт, что одновременно, у меня запомнилось бы значение (одно из этих 8 возможных) для SD), но при этом если я отпущу сначала D и буду держать только S то установилось значение, которое устанавливалось бы для S. А если я держу ADS, то выходит что я держу только S (потому что обе нажатые в данном случае - всё равно что ни одна из них не нажата).
Если я держал S и D, то текущее значение пока я их держу и уже потом будет равно соответствующему (сначала значение SD а потому той, которая останется нажатой), то есть если я отпущу одну из смежных то значение измениться, а когда вторую отпущу установится последнее соответствующее (опять таки как при движении в 8 возможных сторон)
Значения могут идти против часовой стрелки, начиная с D, или D, DW, W, WA и так далее (как image_angle от 0 до 360 (или снова 0))
Сообщение отредактировал StarLLaythe - Пятница, 28 Июня 2019, 20:57 |
|
| |
LunarPixel | Дата: Суббота, 29 Июня 2019, 18:15 | Сообщение # 2 |
старожил
Сейчас нет на сайте
| Можно как-то так попробовать в step. Не забудь создать событие alarm 0 с кодом в котором просто комментарий (//). Alarm нужен, чтобы была небольшая задержка при отпускании двух клавиш, иначе значение будет меняться.
Код if (alarm[0] == -1) { switch (keyboard_check(ord("A")) + 2*keyboard_check(ord("S"))) { case 1: n = 1; break; case 2: n = 2; break; case 3: n = 5; alarm[0] = room_speed/10; // room_speed/10 - время задержки break; }
switch (keyboard_check(ord("S")) + 2*keyboard_check(ord("D"))) { case 2: n = 3; break; case 3: n = 6; alarm[0] = room_speed/10; break; }
switch (keyboard_check(ord("D")) + 2*keyboard_check(ord("W"))) { case 2: n = 4; break; case 3: n = 7; alarm[0] = room_speed/10; break; }
switch (keyboard_check(ord("W")) + 2*keyboard_check(ord("A"))) { case 3: n = 8; alarm[0] = room_speed/10; break; } }
|
|
| |
StarLLaythe | Дата: Воскресенье, 30 Июня 2019, 12:41 | Сообщение # 3 |
был не раз
Сейчас нет на сайте
| Вообще я находил одну такую штуку со свитчем и, в тоже время, думал о наличии задержки, но я не такой скилованный и не оч знал как свитч в принципе может работать в моём случае помимо простых.
Именно со сменой значений и была проблема, можно было ухитриться но это было не удобно, ну постоянно успевать отпускать обе смежные клавиши.
В общем я был не уверен, но теперь всё круто, управляться значение стало значительно мягче, спасибо за подробное объяснение!
|
|
| |