×
Traktatov.net » Создание игр для мобильных телефонов » Читать онлайн
Страница 219 из 246 Настройки
...

Совет Разработчику

Другой способ сделать игровой код эффективнее – передать в метод collidesWith() в качестве второго параметра значения false. Если вы вспомните, то этот параметр определяет, будет ли использоваться пиксельный метод детектирования столкновений. В игре Space Out такой способ детектирования изображений не нужен.

Следующий фрагмент кода в методе update() добавляет спрайты в игру случайным образом. Скорость, с которой новые пришельцы появляются в игре, зависит от уровня сложности. Следовательно, вы можете плавно изменять сложность игры, увеличивая скорость появления пришельцев. Это можно сделать на основании счета игры:

if (score < 250) {

if (rand.nextInt() % 40 == 0) //Это самый простой уровень игры, который заканчивается, когда игрок набирает 250 очков

addAlien();

}

else if (score < 500) {

if (rand.nextInt() % 20 == 0)

addAlien();

}

else if (score < 1000) {

if (rand.nextInt() % 10 == 0)

addAlien();

}

else {

if (rand.nextInt() % 5 == 0) //Это самый сложный уровень игры, который начинается, когда игрок набирает 1000 очков

addAlien();

}

Если счет меньше 250, то вероятность добавления нового спрайта на каждом игровом цикле равна 1/40. Это соответствует самому простому уровню игры. Сложность игры постепенно увеличивается, пока счет не станет равным 1000. В этом случае вероятность появления пришельца в игровом цикле равна 1/5. Если вы задумались о том, сколько времени требуется для выполнения одного цикла, то знайте, что пришельцы появляются достаточно быстро. Последний фрагмент кода метода update() случайным образом запускает ракеты пришельцев:

if (rand.nextInt() % 4 == 0) {

switch (Math.abs(rand.nextInt() % 3)) {

// стреляет Блоббо

case 0:

for (int i = 0; i < 3; i++)

if (blobboSprite[i].isVisible()) {

addMissile(blobboSprite[i]);

break;

}

break;

// стреляет Джелли

case 1:

for (int i = 0; i < 3; i++)

if (jellySprite[i].isVisible()) {

addMissile(jellySprite[i]);

break;

}

break;

// стреляет Тимми

case 2:

for (int i = 0; i < 3; i++)

if (timmySprite[i].isVisible()) {

addMissile(timmySprite[i]);

break;

}

break;

}

}

Этот код случайным образом определяет, должен ли выстрелить пришелец. Соотношение 1 к 4 было выведено методом проб и ошибок. Если в результате выполнения кода должна быть запущена ракета, то выбирается ракета пришельца. Затем определяется видимый спрайт нужного типа, после чего вызывается метод addMissle() для запуска ракеты. Обратите внимание, что спрайт пришельца, запускающего ракету, передается в метод addMissle().

...

Совет Разработчику

Подобно тому, как возрастает скорость появления пришельцев с увеличением счета игры, можно увеличивать и число запускаемых пришельцами ракет.

Вывод графики

Вывод графики на экран сравним с методом обновления игры. В листинге 18.3 приведен код метода draw() класса SOCanvas.

Листинг 18.3. Метод draw() класса SOCanvas выводит фоновое изображение и игровые слои, а также при необходимости сообщение о завершении игры

private void draw(Graphics g) {

// вывод звездного ночного неба

g.drawImage(background, 0, 0, Graphics.TOP | Graphics.LEFT);

// вывод слоев