Цитата:
|
Если писать код перемещения персонажа в классе Keys
|
Во-первых, я такого не говорил. Я не согласен с тем, что код перемещения должен писаться в том, кто перемещается. Во-вторых, это Вам
кажется, что скорость обязана храниться в персонаже. Прежде всего потому, что Вы еще не готовы мысленно разделять данные и отображение, и не представляете другого способа, кроме как хранить всю инфу о персонаже в его "картинке". Попробуйте рассматривать все изображения на карте как просто изображения. Управляемые логикой на уровне карты. Карта в любом случае знает все объекты, которые на ней находятся — они ее дети. Намного проще проверять коллизии и управлять перемещением на этом уровне, а не изнутри отдельных объектов, абсолютно ничего не знающих об окружающем мире.
Но, возможно, для этого разговора еще просто не настало время.
Класс Keys должен просто представлять состояние клавиатуры. Никакой другой ответственности не надо на него вешать.
Логическое ядро по таймеру или ентерфрейм пытается построить текущее состояние карты для нового "кадра". Опрашивает клавиатуру, какие клавиши нажаты, анализирует положение объектов: может ли двигаться перс в заданном направлении, не столкнулся ли он со стеной, или бонусом, или врагом, не достиг ли финиша и жив ли еще вообще)). Направляет врагов, в поле зрения которых попал перс, в его сторону, и т.д. Еще раз повторюсь: персонаж в вакууме это одно. Вы можете тупо прибавлять/отнимать скорость от его координаты по нажатию клавиши. Персонаж как часть системы — абсолютно другое. Здесь его движение зависит от состояния всей системы, а вовсе не только от нажатой клавиши. Просто представьте аналогию: вы с другом играете в шашки. Шашкам не надо знать, как ходить. Они просто изображают себя на карте. А перемещение делаете Вы. И Вы знаете, куда и как надо ходить, кто будет "срублен" и закончилась ли игра. Не шашки.