PDA

Просмотр полной версии : Управление с клавиатуры


Sintesis
28.10.2010, 18:38
Хотел спросить как делается так, что-б клавиши не мешали друг другу? Вот первый раз решил игру сделать а тут проблема такая. У меня Spsce - прыжок; Left, Right - идти налево и напрво, так вот когда объект передвигается - жму Space он прыгает и останавливается хотя кнопку движения не отпускаю... Как сделать так, что-б кнопки не перебивали друг друга?

Bgg
28.10.2010, 18:50
Сменить клавиатуру.
И почитать форум (http://www.flasher.ru/forum/showthread.php?t=146049)

Sintesis
28.10.2010, 20:10
Нет не то, при чём тут клавиатура? Это я что-то не правильно делаю...
вот код:


private function onKeyDown(e:KeyboardEvent):void {

switch(e.keyCode){
case Keyboard.LEFT :
ball.vx = -2;
break;
case Keyboard.RIGHT :
ball.vx = 2;
break;
case Keyboard.SPACE :
ball.vy += -8;
break;
}
}

при таком коде: нажимаеш клавишу "вправо" и удерживаеш - обьект перемещается вправо, потом нажимаеш "спэйс"(не отпуская "вправо") обьект прыгает и больше не перемещается вправо, хотя клавиша "вправо" ещё нажата, что-б опять начать перемещаться вправо - нужно отпустить клавишу "вправо" и нажать её снова - движение возобновится. Но мне нужно, что-б "спэйс" не мешал клавише "вправо", не останавливал движение...

gloomyBrain
28.10.2010, 20:31
Тысячу раз обсуждалось.
Заведите список всех нажатых клавиш и исходя из него меняйте скорость

КорДум
28.10.2010, 21:07
http://www.flasher.ru/forum/showthread.php?t=124979&highlight=wasd
Похоже, оно. Нужно данную тему где-то закрепить, что ли. А то слишком много таких вопросов стало.

Sintesis
29.10.2010, 02:37
я с клавиатурой впервые работаю вот и вопросы возникают, вот ещё один:
как сделать так что-б при зажатии спэйс происходил 1 прыжок? У меня при зажатой спэйс происходят многократные прыжки, нужно, что-б 1 раз прыгнул...

VVall
29.10.2010, 02:45
Заведите флаг для прыжка. При отпускании пробела он сбрасывается, при нажатии смотрите, установлен-ли он - если нет, то прыгаете и устанавливаете.

Sintesis
29.10.2010, 18:42
Спасибо, разобрался, не знал, что кнопки так себя ведут - приходится использовать Boolean. Кстати ответы Bgg, КорДум, gloomyBrain только вводили в заблуждение. Я хотел узнать вот это:


var left:Boolean = false;
var right:Boolean = false;
var jump:Boolean = false;

private function onKeyDown(e:KeyboardEvent):void {

if (e.keyCode == 37) {
left = true;
}

if (e.keyCode == 39) {
right = true;
}

if (e.keyCode == 32) {
jump = true;
}
}

private function onKeyUp(e:KeyboardEvent):void {

if (e.keyCode == 37) {
left = false;
}

if (e.keyCode == 39) {
right = false;
}

if (e.keyCode == 32) {
chekJump = false;
jump = false;
}
}

private function onBallMove():void {
if (left) {
ball.vx = -4;
}

if (right) {
ball.vx = 4;
}

if (jump) {
ball.vy = -8;
}
}


При таком коде ни одна кнопка не мешает другой - то, что я и хотел узнать.

КорДум
29.10.2010, 19:16
Кстати ответы Bgg, КорДум, gloomyBrain только вводили в заблуждение.
Мы вам хотели показать, как будет правильно. Но, вы решили сделать по-своему, ок.

iNils
29.10.2010, 19:19
При таком коде ни одна кнопка не мешает другойВсе зависит от клавиатуры, а не от кода. Часть нажатых клавиш замыкают цепь, которую используют другие клавиши, поэтому есть реакция только на первые нажатия.

Antony
30.10.2010, 00:50
Все правильно Sintesis написал. Сам пользуюсь такимже способом.
А клавиатура тут имхо непричем. Ниразу не видил клаву, чтобы одновременно не могла слушать стрелки и пробел.

iNils
30.10.2010, 02:03
Все правильно Sintesis написал. Сам пользуюсь такимже способом.
А клавиатура тут имхо непричем. Ниразу не видил клаву, чтобы одновременно не могла слушать стрелки и пробел.Почитайте теорию.