Вход/Регистрация
Создание игр для мобильных телефонов
вернуться

Моррисон Майкл

Шрифт:

int a = 37, b = 26;

int n = ((a % 3) + (b / 7)) ^ 8;

Скрытые переменные класса

Другая ошибка, которая свойственна объектно-ориентированному программированию игр – это сокрытые переменные класса. Сокрытые переменные могут «потеряться», если в производном классе есть новая одноименная переменная. Взгляните на код, приведенный в листинге 16.1. Он реализует два класса Weapon и Bazooka.

Листинг 16.1. Классы Weapon и Bazooka

class Weapon {

int power;

int numShots;

public Weapon {

power = 5;

numShots = 10;

}

public void fire {

numShots–; //Переменная numShots в классе Weapon определена

}

}

class Bazooka : extends Weapon {

int numShots; //Переменная numShots скрывает переменную numShots родительского класса Weapon

public Bazooka {

super;

}

public blastEm {

power–;

numShots -= 2; //Переменная numShots класса Bazooka увеличивается, в то время как сокрытая переменная numShots класса Weapon остается неизменной

}

}

Класс Weapon определяет две переменные: power и numShots. Класс Bazooka, производный от класса Weapon, также содержит переменную numShots, которая замещает одноименную переменную родительского класса. Проблема с этим кодом заключается в том, что когда конструктор класса Bazooka вызывает конструктор класса Weapon (через функцию super), инициализируется переменная numShots класса Weapon, a не класса Bazooka. При вызове метода blastEm в классе Bazooka используется видимая переменная numShots, которая по умолчанию инициализируется нулем. Как вы, вероятно, можете представить, в более сложных классах подобные проблемы более серьезны.

Поэтому необходимо следить за тем, чтобы не скрывать переменные. Это не означает, что вы не должны их использовать, помните о риске, который влечет за собой использование таких переменных.

Обработка исключений

Одна из полезных стратегий предотвращения ошибок в Java – это обработка исключений. Эта методика основана на предотвращении появления неожиданных сообщений во время выполнения программы. Чтобы обработать «проблемный» код, его необходимо заключить в конструкцию try и обработать исключение командой catch. Событие «ошибка» по своей природе является исключением, а конструкция catch называется «обработчиком исключения».

Ниже приведен пример кода обработки исключений, который вы уже неоднократно встречали в книге:

try {

//действия

}

catch (Exception e) {

System.err.println(e);

}

В этом коде обрабатываемое исключение – это исключение типа Exception, общий тип для всех исключений. В некоторых случаях в ответ на возникшее исключение может понадобиться выполнить какие-нибудь действия, а не просто вывести сообщение об ошибке. Или вы можете никак не обрабатывать возникшее исключение, подобно тому, как это сделано в некоторых мидлетах в книге.

...

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

Java поддерживает стандартные устройства ввода/вывода, которые можно использовать для отображения отладочной информации. System.err – это стандартное «устройство» ошибок, которое можно использовать для вывода ошибок в специальном окне или в командной строке эмулятора J2ME. Метод println выводит строку в стандартное устройство.

Мы обсудили лишь малую часть обработки ошибок во время выполнения программы (исключений). Я настоятельно рекомендую более глубоко познакомиться с исключениями и их обработкой. К счастью, об обработке исключений в Java написано достаточно много, поэтому у вас не возникнет трудностей с поиском этой информации.

Выявление ошибок

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

Использование стандартного вывода

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

Использовать стандартный прием вывода очень просто, например, вызовите метод System.out.println в любом месте кода. Вы можете использовать стандартный вывод для выполнения многих задач – от отслеживания значений переменных до выявления запускаемых методов – просто вызовите метод println, когда это нужно. Остерегайтесь вызывать метод println в цикле обновления, например, внутри метода update, который управляет анимацией мидлетов. В этом случае метод println может замедлить работу мидлета, поскольку вывод текста на экран – достаточно медленная операция.

...

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

Стандартный вывод очень похож на стандартное устройство ошибок. В реальности они очень похожи. На практике очень полезно применять описанную выше методику для вывода отладочной информации.

Отслеживание стека вызовов

Незаменимый инструмент поиска сложных ошибок – это использование стека вызовов. Метод стека вызовов – это ряд методов, вызываемых для перехода в текущую выполняемую строку кода. Изучая стек вызовов, вы видите, какие методы вызываются. Эта информация помогает выявить неверный вызов методов.

Чтобы просмотреть стек вызовов, необходимо применить метод printStackTrace класса Throwable. Поскольку метод printStackTrace принадлежит классу Throwable, то для просмотра стека вызовов необходимо создать соответствующий объект. Все исключения являются производными от класса Throwable, поэтому каждый раз, когда в программе возникает исключение, вы можете просмотреть стек вызовов. Посмотрите на фрагмент кода:

try {

int nums[] = new int[5];

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

nums[i] = 6670;

}

catch (ArrayIndexOutOfBoundsException e) {

System.out.println("**Exception** : " + e.getMessage);

e.printStackTrace; //Вывести стек вызовов

}

  • Читать дальше
  • 1
  • ...
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: