Разработка игровых дополнений
Заставка видео появляется при запуске игры, а также между уровнями. Заставки могут быть очень занятными или простыми, они могут нести такую информацию, как название игры, иллюстрации, информация об авторских правах, инструкции по игре, и рекорды. В игре Space Out 2 вы создадите заставку, состоящую из названия игры и списка рекордов. На рис. 19.4 показано растровое изображение Space Out 2.
Совет Разработчику
В играх на заставку целесообразно выносить информацию об авторских правах, чтобы четко установить свои права на игру.
Такая простая заставка игры объясняется тем, что игра работает в условиях ограниченных ресурсов мобильного устройства. Конечно, вы можете вынести больше информации на экран, однако иногда лучше меньше, чем больше. Кроме того, необходимо оставить место для вывода списка рекордов.
Написание игрового кода
Игра Space Out 2 содержит список из 5 рекордов, которые помещаются в хранилище записей. Хотя хранилище используется для постоянного хранения информации о рекордах, в игре они являются целыми числами. Ниже приведено объявление переменных игры Space Out 2, хранящих игровую заставку и массив рекордов:
private Image splash; private int[] hiScores = new int[5];
Совет Разработчику
Вам ничего не мешает при желании расширить список рекордов. Просто помните, чтобы отобразить больший список рекордов, требуется больше места на экране.
Добавление списка рекордов в игру Space Out прежде всего ведет к изменениям метода start(), который, как вы знаете, отвечает за инициализацию игры и ее запуск. Этот метод как нельзя лучше подходит для чтения списка рекордов из хранилища записей. В методе start() чтение из хранилища записей выполняется одной строкой:
readHiScores();
Метод readHiScores() отвечает за открытие хранилища записей и последовательного чтения данных в целочисленный массив hiScores. В листинге 19.1 приведен код метода readHiScores(): Листинг 19.1. Метод readHiScores() считывает список рекордов из хранилища записей
private void readHiScores()
{
// открыть хранилище записей
RecordStore rs = null;
try {
rs = RecordStore.openRecordStore("HiScores", false); //Хранилище записей называется «HiScores»
}
catch (Exception e) {
}
if (rs != null) {
// считать список рекордов
try {
int len;
byte[] recordData = new byte[8];
for (int i = 1; i <= rs.getNumRecords(); i++) { //Пройти по всем записям хранилища
// при необходимости изменить размер выделенной памяти
if (rs.getRecordSize(i) > recordData.length)
recordData = new byte[rs.getRecordSize(i)];
// считать рекорд, преобразовать в число и записать в массив
len = rs.getRecord(i, recordData, 0);
hiScores[i – 1] = (Integer.parseInt(new String(recordData, 0, len))); //Преобразовать массив байтов в целое число и сохранить в массив рекордов
}
}
catch (Exception e) {
System.err.println("Failed reading hi scores!");
}
// закрыть хранилище данных
try {
rs.closeRecordStore();
}
catch (Exception e) {
System.err.println("Failed closing hi score record store!");