Скорость, с которой персонаж идет, определяется значением переменной speed.
Далее мы устанавливаем переменную со странным именем feeler. Это требует небольшого пояснения. В нашем предыдущем файле примере (как и в этом файле) объект перемещается вокруг одной указанной точки. Мы все знаем, что персонаж в реальной жизни является трехмерным и, следовательно, характеризуется более чем одной точкой. Если мы используем лишь одну точку, чтобы определить, куда направляется персонаж, то когда персонаж находится на краю плитки, ограничивающей объект, такой как блок, некоторая часть персонажа все еще находится на предыдущей плитке, но некоторые графические элементы перекрывают блок. Это вызывает проблему визуального восприятия, но не вызывает никакой проблемы для программирования. Все по-прежнему работает, но возможно не выглядит так хорошо, как вам хотелось бы. Существует несколько способов для обработки, или исключения этой визуальной проблемы. Наиболее правильный способ состоит в обращении с персонажем, как если бы он был цилиндром или кубом (как мы предположили в Главе 6, «Реакция на столкновения»). Мы собираемся использовать даже более простой подход – мы будем использовать нечто под названием щупальца. Представьте насекомое, расхаживающее повсюду. Прежде чем основная часть насекомого переместится на новую поверхность, его щупальца вначале проверяют эту поверхность. В нашем случае, мы расширяем щупальца на расстояние 10 пикселей по направлению, в котором движется персонаж. Если щупальца обнаружили объект в ячейке, которая близка, но еще не достигнута, персонаж прекращает движение. В этом файле это работает удивительно хорошо. Щупальца вы видеть не можете; они являются просто кодом программы. Вы увидите применение этой техники в функциях detectObjects() и worldClicked().
В строке 11 мы устанавливаем переменную с именем moving. Она всегда будет иметь значение true или false. Если true, то персонаж движется.
В строке 13 вызывается функция positionCharacter()