Просмотр полной версии : Управление с клавиатуры
Sintesis
28.10.2010, 18:38
Хотел спросить как делается так, что-б клавиши не мешали друг другу? Вот первый раз решил игру сделать а тут проблема такая. У меня Spsce - прыжок; Left, Right - идти налево и напрво, так вот когда объект передвигается - жму Space он прыгает и останавливается хотя кнопку движения не отпускаю... Как сделать так, что-б кнопки не перебивали друг друга?
Сменить клавиатуру.
И почитать форум (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
Тысячу раз обсуждалось.
Заведите список всех нажатых клавиш и исходя из него меняйте скорость
http://www.flasher.ru/forum/showthread.php?t=124979&highlight=wasd
Похоже, оно. Нужно данную тему где-то закрепить, что ли. А то слишком много таких вопросов стало.
Sintesis
29.10.2010, 02:37
я с клавиатурой впервые работаю вот и вопросы возникают, вот ещё один:
как сделать так что-б при зажатии спэйс происходил 1 прыжок? У меня при зажатой спэйс происходят многократные прыжки, нужно, что-б 1 раз прыгнул...
Заведите флаг для прыжка. При отпускании пробела он сбрасывается, при нажатии смотрите, установлен-ли он - если нет, то прыгаете и устанавливаете.
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;
}
}
При таком коде ни одна кнопка не мешает другой - то, что я и хотел узнать.
Кстати ответы Bgg, КорДум, gloomyBrain только вводили в заблуждение.
Мы вам хотели показать, как будет правильно. Но, вы решили сделать по-своему, ок.
При таком коде ни одна кнопка не мешает другойВсе зависит от клавиатуры, а не от кода. Часть нажатых клавиш замыкают цепь, которую используют другие клавиши, поэтому есть реакция только на первые нажатия.
Все правильно Sintesis написал. Сам пользуюсь такимже способом.
А клавиатура тут имхо непричем. Ниразу не видил клаву, чтобы одновременно не могла слушать стрелки и пробел.
Все правильно Sintesis написал. Сам пользуюсь такимже способом.
А клавиатура тут имхо непричем. Ниразу не видил клаву, чтобы одновременно не могла слушать стрелки и пробел.Почитайте теорию.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.