Доброго времени суток ,вопрос как сделать так что бы змейка после столкновения с одной стороной стены , вылазила с другой стороны стены? что бы было geme over только при столкновении сама с собой имеем код
update: function ()
{
// ...
if (updateDelay % (10 - speed) == 0)
{
// ...
// Увеличиваем размер змейки, если яблоко было съедено
// Создаём блок позади змейки со старыми координатами последнего блока
// (последний блок, к настоящему моменту, переместился вместе с остальной частью змейки)
if (addNew)
{
snake.unshift(game.add.sprite(oldLastCellx, oldLastCelly, 'snake'));
addNew = false;
}
// Проверяем столкновение с яблоком
this.appleCollision();
// Проверяем столкновение головы змейки со своим телом
// Параметр - голова змейки
this.selfCollision(firstCell);
// Проверяем столкновение головы змейки со стеной
// Параметр - голова змейки
this.wallCollision(firstCell);
}
},
generateApple: function ()
{
// Выбираем случайное место на игровом поле
// X между 0 и 585 (39*15)
// Y между 0 и 435 (29*15)
var randomX = Math.floor(Math.random() * 40) * squareSize,
randomY = Math.floor(Math.random() * 30) * squareSize;
// Добавляем новое яблоко
apple = game.add.sprite(randomX, randomY, 'apple');
},
appleCollision: function ()
{
// Проверяем, что любая часть змейки пересекла яблоко
// Проверка пересечения со всеми частями змейки необходима, чтобы
// учесть случай, если новое яблоко появится внутри змейки
for (var i = 0; i < snake.length; i++)
{
if (snake[i].x == apple.x && snake[i].y == apple.y)
{
// В следущий момент времени, когда змейка переместится, то
// новый блок будет добавлен к ней
addNew = true;
// Удаляем старое яблоко
apple.destroy();
// Создаём новое яблоко
this.generateApple();
// Увеличиваем число заработанных очков
score++;
// Обновняем очки на экране
scoreTextValue.text = score.toString();
}
}
},
selfCollision: function (head)
{
// Проверяем, что голова змейки не пересекла одну из своих частей
for (var i = 0; i < snake.length - 1; i++)
{
if (head.x == snake[i].x && head.y == snake[i].y)
{
// Если пересекла, то показываем экран Game Over
game.state.start('Game_Over');
}
}
},
wallCollision: function (head)
{
// Проверяем, что голова змейки находится в границах игрового поля
if (head.x >= 600 || head.x < 0 || head.y >= 450 || head.y < 0)
{
// Если это не так, что мы врезались в стену. Значит, показываем экран Game Over
game.state.start('Game_Over');
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
var Game_Over = {
preload: function ()
{
// Загружаем рисунок
game.load.image('gameover', './assets/images/gameover.png');
},
create: function ()
{
// Создаём кнопку для старта игры, как мы делали в скрипте main.js
this.add.button(0, 0, 'gameover', this.startGame, this);
// Выводим на экран сколько мы набрали очков
game.add.text(235, 350, "LAST SCORE", { font: "bold 16px sans-serif", fill: "#46c0f9", align: "center" });
game.add.text(350, 348, score.toString(), { font: "bold 20px sans-serif", fill: "#fff", align: "center" });
},
startGame: function ()
{
// Меняем текущее состояние обратно на состояние "Игра"
// Change the state back to Game.
this.state.start('Game');
}
};