Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.08.2014, 23:08
Интересующийся
Отправить личное сообщение для Straj Посмотреть профиль Найти все сообщения от Straj
 
Регистрация: 05.08.2014
Сообщений: 16

Движение игрока по стрелкам.
Сделал передвижение игрока по клавишам WASD. И все бы хорошо, нажал W - движется вверх, S - вниз, но как быть когда нажаты 2 одновременно (должно быть движение по диагонали или стоп).
document.onkeydown = function (e) {	
        keyPressed = e.keyCode;
}

document.onkeyup = function (e) {
	keyPressed = null;
}

//...

function loop () {
	requestAnimationFrame(loop);
        //...

	 if (keyPressed === 87 || keyPressed===65 || keyPressed===83 || keyPressed===68) {		
		snakeObj.moving(keyPressed);
	}
}

Snake.prototype.moving = function (e) {		
	switch (e) {
		case 87:		
		snakeObj.redrawing(this.snake.getAttr("x"),this.snake.getAttr("y")-SPEED);
		snakeObj.clearSnake();
		break;

		case 65:		
		snakeObj.redrawing(this.snake.getAttr("x")-SPEED, this.snake.getAttr("y"));
		snakeObj.clearSnake();
		break;

		case 83:
		snakeObj.redrawing(this.snake.getAttr("x"),this.snake.getAttr("y")+SPEED);
		snakeObj.clearSnake();
		break;

		case 68:
		snakeObj.redrawing(this.snake.getAttr("x")+SPEED,this.snake.getAttr("y"));
		snakeObj.clearSnake();
		break;
	}
}


Как быть? Есть кое-какие мысли (добавить еще один слушатель в функции первого), но не уверен в их правильности.
Ответить с цитированием
  #2 (permalink)  
Старый 16.08.2014, 00:41
Аватар для ixth
Профессор
Отправить личное сообщение для ixth Посмотреть профиль Найти все сообщения от ixth
 
Регистрация: 19.01.2010
Сообщений: 354

Почему методы не в повелительном наклонении? Впрочем, неважно.

Где у тебя snakeObj определяется? Что делает clearSnake?
Ответить с цитированием
  #3 (permalink)  
Старый 16.08.2014, 00:45
Интересующийся
Отправить личное сообщение для Straj Посмотреть профиль Найти все сообщения от Straj
 
Регистрация: 05.08.2014
Сообщений: 16

Да не важно ж. Мне нужен способ движения по нескольким клавишам определить. Даже код не надо, только логику.
Врочем, clearSnake - очищает слой. Довольно успешно.
Ответить с цитированием
  #4 (permalink)  
Старый 16.08.2014, 00:52
Аватар для ixth
Профессор
Отправить личное сообщение для ixth Посмотреть профиль Найти все сообщения от ixth
 
Регистрация: 19.01.2010
Сообщений: 354

Вообще это адский ад. Глобальные переменные, switch практически с копипастой… Попробуй почитать какую-нибудь умную книжку по ООП, например «Совершенный код» или что-нибудь вроде этого.
var KEY_W = 87;
var KEY_A = 65;
var KEY_S = 83;
var KEY_D = 68;

var keysPressed = [];

document.onkeydown = function (e) {
	keysPressed.push(e.keyCode);
};

document.onkeyup = function (e) {
	var index = keysPressed.indexOf(e.keyCode);
	if (index) {
		keysPressed.splice(index, 1);
	}
};

//...

function loop () {
	requestAnimationFrame(loop);
        //...

	snakeObj.moving(keysPressed);
}

Snake.prototype.moving = function (e) {
	var dx = 0, dy = 0;
	if (keysPressed.indexOf(KEY_W) > -1) {
		dy = -SPEED;
	}
	if (keysPressed.indexOf(KEY_A) > -1) {
		dx = -SPEED;
	}
	if (keysPressed.indexOf(KEY_S) > -1) {
		dy = SPEED;
	}
	if (keysPressed.indexOf(KEY_D) > -1) {		
		dx = SPEED;
	}
	if (dx !== 0 || dy !== 0) {
		snakeObj.redrawing(
			this.snake.getAttr("x") + dx,
			this.snake.getAttr("y") + dy
		);
		snakeObj.clearSnake();
	}
}
Ответить с цитированием
  #5 (permalink)  
Старый 16.08.2014, 01:22
Интересующийся
Отправить личное сообщение для Straj Посмотреть профиль Найти все сообщения от Straj
 
Регистрация: 05.08.2014
Сообщений: 16

О, большое спасибо. И за книгу
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
движение текста при нажатии кнопки jquery imediasun1 Элементы интерфейса 10 31.01.2014 10:55
Движение на java script Malsim Элементы интерфейса 19 02.04.2013 23:31
События: движение мыши при нажатой клавише bayah Общие вопросы Javascript 11 18.12.2012 10:18
Движение объекта в ячейке определённого размера lammeR Общие вопросы Javascript 4 20.04.2010 17:14
Движение скроллинга окна по направлению миши bobus123 Events/DOM/Window 0 02.09.2009 15:17