@GRIMSHOT

Делаю игру. Нужно что-бы при касании объекта об другой объект игра перезапускалась. Как можно это реализовать?

Добрый день. Делаю игру на javascript. Суть игры - есть ракета которая может перемещаться наверх и вниз по координате X, также есть астероиды которые должны мешать ракете летать, при столкновении с астероидом игра должна перезапускаться. Помогите пожалуйста организовать это столкновение. В качестве примера я указал в коде :
var cvs = document.getElementById("cvs1");
var ctx = cvs.getContext("2d");
var cvs1_w = 700;

// КАРТИНКИ
var bg = new Image();
var bg2 = new Image();
var asteroid = new Image();
var raketa_img = new Image();

bg2.src = "bg.jpg";
bg.src = "bg.jpg";
asteroid.src = "asteroid.png"
raketa_img.src = "raketa.png";

// ФОН
var bg1X = 0;
var	bg1Y = 0;
var bg1W = 700
var	bg2X = 700;
var	bg2Y = 0;
var bg2W = 700

var box = 29.545454545454547;

// АСТЕРОИД
var ast = {
	x : Math.floor(Math.random() * 22) * box,
	y : Math.floor(Math.random() * 22) * box,
	w : 22,
	h : 22,
}

// РАКЕТА
var raketa = {
	x : 50,
	y : 200,
	w : 54,
	h : 23,
}

var score = 0;
function score1() {
	score++;
}
// СКОРОСТЬ - РАКЕТА, ФОН, АСТЕРОИД
var ast_speed = 5;
var speed = 8;
var bg_speed = 5;
var bg2_speed = 5;

// ДВИЖЕНИЕ ФОНА
function background_move() {
	bg2X -= bg2_speed;
	bg1X -= bg_speed;
			
	if (bg1X + bg1W < 0) {
		bg1X = bg2X + bg2W;
	}

	if (bg2X +bg2W < 0) {
		bg2X = bg1X + bg1W;
	}	
}

// ПЕРЕДВИЖЕНИЕ РАКЕТЫ
document.addEventListener("keydown", keys_n);
function keys_n(e) {
	if (e.keyCode == 38 && raketa.y >= 10) {
		raketa.y -= speed;
	}

	if (e.keyCode == 40 && raketa.y <= 620) {
		raketa.y += speed;
	}

}

// РИСОВКА ИЗОБРАЖЕНИЙ
function draw() {
	ctx.drawImage(bg, bg1X, bg1Y);
	ctx.drawImage(bg2, bg2X, bg2Y);
	ctx.drawImage(raketa_img, raketa.x, raketa.y);
	ctx.drawImage(asteroid, ast.x, ast.y);

	// Движение астероида
	ast.x -= ast_speed;
	
	// СТОЛКНОВЕНИЕ Как можно это исправить
	if (ast.x == raketa.x && ast.y == raketa.y) {
		location.reload();
	}

ctx.fillStyle = "#FEF501";
 ctx.font = "20px Verdana";
 ctx.fillText(score + " км", 400, 25)
}

// ВКЛЮЧЕНИЕ ФУНКЦИЙ
raketa_img.onload = draw;
var game = setInterval(draw, 20);
var background = setInterval(background_move, 20);
var score2 = setInterval(score1, 100)
только один астероид
  • Вопрос задан
  • 119 просмотров
Решения вопроса 1
twobomb
@twobomb
Если будет достаточно bbox, то типа такого
if (ast.x <= raketa.x+raketa.w &&  ast.x+ast.w >= raketa.x &&
    	ast.y <= raketa.y+raketa.h &&  ast.y+ast.h >= raketa.y) {
    location.reload();
  }
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы