Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Подкоректируйте код (есть один баг) (https://javascript.ru/forum/misc/68181-podkorektirujjte-kod-est-odin-bag.html)

АнонимныйПарень 30.03.2017 18:13

Подкоректируйте код (есть один баг)
 
Ребята, здравствуйте!
Нужна помощь! Я делаю игру, у меня есть персонаж, который может "прыгать" и ходить в лево/право. Когда координата "Y" у персонажа больше определенной цифры, персонаж уменьшает свой "Y", то-есть опускается. Баг состоит в том, что человек может нажать несколько раз на кнопку прыжка, я хотел бы что б до момента приземления персонажа, нельзя было нажать на кнопку прыжка. Помогите, пожалуйста, подредактировать код.

КОД:
jQuery( document ).ready(function() {

//Создаю canvas
	var canvas = document.getElementById('canvas');
	var context = canvas.getContext('2d');
	var width = 700;
	var height = 700;

//Добавляю стили для canvas
	canvas.width = width;
	canvas.height = height;
	canvas.style.border = "1px solid black";

//Константы и глобальные переменные 
	var x = 150;
	var y = 250;
	var dx = 3;
	var dy = 50;
	var x2 = 135;
	var y2 = 387;

//Создаю Боба
	var img = new Image();
	img.src = 'images/bob.png';

	var bobDraw = function () {
		context.drawImage(img, x, y, 66, 132);
		context.drawImage(img2, x2, y2, 100, 100);
	};

	var img2 = new Image();
	img2.src = 'images/grass.png';

	var grassDraw = function () {
		context.drawImage(img2, x2, y2, 100, 100);
	};

//Игровой цикл
	var z = setInterval(function () {

	context.clearRect(0, 0, width, height);

	// Управление Бобом
	window.onkeydown = function (e) {
		if(e.keyCode == 87) { //W
			//console.log(dy);
			y += -dy;
		}
		if(e.keyCode == 65) { //A
			x += -dx;
			//console.log(dx); Скорость
			img.src = 'images/bob2.png';
		}
		if(e.keyCode == 83) { //S
			console.log("S");
		}
		if(e.keyCode == 68) { //D
			x += dx;
			//console.log(dx); Скорость
			img.src = 'images/bob.png';
		}
	};

	if (y <= 250) {
		y += 5;
	};
	if (y <= 200) {
		y += 10;
	};
	if (y <= 120) {
		y += 15;
	};

	bobDraw();
	grassDraw();
	
	}, 200);
});


<!DOCTYPE html>
<html>
<head>
	<title>TEST</title>
	<link href="style.css" rel="stylesheet" type="text/css"/>
	<script type="text/javascript" src="jquery-3.1.1.min.js"></script>
	<script type="text/javascript" src="script.js"></script>
</head>
<body>
		<canvas id="canvas"></canvas>
</body>
</html>

Brook 31.03.2017 17:09

Все очень просто просто пропишите проверку положения бюоба по высоте (кордината y), например кордината y когда боб стоит на земле равна 0, во время прыжка она больше значит пока эта кордината снова не будет равно 0, игнорировать прыжок, код будет выглядеть приблизительно так:

if(e.keyCode == 87 [B]&& y == 0[/B] ) { // where  0 is position of y when bob stand on the ground
//console.log(dy);
y += -dy;
}

Rise 31.03.2017 19:40

Цитата:

Сообщение от АнонимныйПарень (Сообщение 448965)
... jquery-3.1.1.min.js ... Создаю canvas ...

Для начала стоит выбрать правильный инструмент, какую-нибудь библиотеку для canvas, а не безполезную здесь jquery.
Цитата:

Сообщение от АнонимныйПарень (Сообщение 448965)
... Я делаю игру ...

Тогда эта библиотека должна быть еще и игровым движком, иначе ты просто погрязнешь на реализации типичных действий в игре на чистом js, а мир не скоро увидит твою крутую игру))

рони 01.04.2017 13:12

АнонимныйПарень,
https://learn.javascript.ru/animation

АнонимныйПарень 01.04.2017 13:19

Все картинки отрисовуются на канвасе, но когда я нажимаю кнопку вверх, ничего не происходит. Он не "прыгает" как раньше. Как эту проблему полечить?


Часовой пояс GMT +3, время: 23:34.