Вероятно, в каждой игре разработчику приходится как-то иметь дело со вводом, будь то простые события клавиатуры и мыши, сенсорные события или что-то вроде ввода акселерометра. Этот вход напрямую косвенно влияет на объекты в игре. Иногда один и тот же вход может влиять на различные объекты. Теперь я думал о том, как смоделировать это. На мой взгляд, есть два разных подхода.
Пусть игровой объект сам обрабатывает его, подписывается на события и вызывает его собственные методы. Преимущество этого состоит в том, что игровые объекты сами решают, какие входные данные вызывают какое действие. Недостатком, по-видимому, является то, что входной код искажается с помощью «основного» кода игрового объекта. Также игровые объекты не знают о состоянии остальной части игры и могут иногда не воздействовать на входные события. Это не кажется правильным.
Пусть общий контроллер ввода позаботится обо всем вводе и примет решение о том, кто будет обрабатывать какое событие. Кажется, это лучше разделяет проблемы, но тесно связывает класс контроллера ввода с игровыми объектами. Нужно как-то знать, кто хочет получить какое событие и в каком состоянии. Это тоже не кажется правильным.
Какие стратегии вы используете для этого?
источник
Я бы предложил, чтобы ваша игра ( Модель ) определила список возможных входных событий (реализованных в виде перечислений или объектов с общим базовым интерфейсом). Вещи , такие как
MovingRightStarted
,MovingRightStopped
,FiredWeapon1
,Escape
и т.д. ...Игра определяет структуру данных (например, а
queue
), которую ваш входной код ( контроллер ) может заполнять входными событиями.Затем ваша игра может опрашивать структуру данных, чтобы получить входные события.
Таким образом, вы можете подключить различные типы контроллеров для питания модели:
Вы просто хотите, чтобы они передавали входные события в модель.
источник
queue
тип данных для хранения этого. Не могли бы вы объяснить, почему?