В разработке игр, особенно на управляемом языке, таком как C # и , особенно на Xbox 360, в целом, ваш первый приоритет должен быть избегать выделения памяти во время игры . Сохранение памяти и уменьшение количества операций является второстепенной задачей.
A null
(в 32-битном формате, в котором работает XNA) - это просто четыре байта!
2D-массив ([,]
), содержащий указатели на ваших захватчиков, кажется вполне уместным. Тем более что он позволяет сделать местоположение каждого захватчика неявным по его местоположению в структуре данных. (Вам даже нужно создавать отдельные объекты захватчиков и указывать на них? Просто используйте число, указывающее, к какому «типу» они относятся.)
Цикл по этой структуре данных (как вы предлагаете) будет настолько удивительно быстрым , что вполне может быть «свободной» операцией. Поскольку сам процессор может обрабатывать данные быстрее, чем вы можете в любом случае поместить их в кеш.
И вы даже не делаете это каждый кадр - только когда ваши захватчики стреляют! Я готов поспорить, что будет медленнее вычислять и хранить эти данные всякий раз, когда захватчик уничтожается, а затем загружать их, когда ваши захватчики стреляют.
(По сути, вы предлагаете кэшировать / предварительно вычислять эти данные. Полезный метод оптимизации производительности - но только , когда это действительно необходимо.)
Вы должны гораздо больше беспокоиться о затратах, которые происходят в каждом кадре, чем о тех, которые запускаются только из-за таймеров и пользовательского ввода.
Не использовать зубчатый массив ([][]
). Это в основном массив массивов. Он использует больше памяти и включает дополнительный уровень косвенности, который, в свою очередь, также может потенциально уменьшить локальность ваших данных (то есть ваши данные могут не попасть в кэш за одно попадание - это «медленный бит») , Это также увеличивает количество объектов, о которых нужно подумать. Не используйте Dictionary
по тем же причинам.
В разработке игр это помогает сохранять такие вещи, связанные с производительностью, по крайней мере, в уме, когда вы работаете (в других местах это было бы преждевременной оптимизацией).
Но для такой простой вещи, как Space Invaders , вы можете делать все, что захотите! Так что делай самое простое, что могло бы сработать.