Я работаю над Java-игрой для Android.Игры здесь, как правило, должны использовать пулы памяти, чтобы избежать сбора мусора.
Ради аргумента, скажем, у меня есть следующие классы:
// Enemy in the game
class Enemy { int x; int y; abstract void update(); }
// Enemy that just bounces around
class Roamer extends Enemy { int direction; ... }
// Enemy that chases a player
class Chaser extends Enemy { Player target; ... }
// maybe 20 more enemy types...
Использование подклассов является болью при использованиипулы памяти, например, вам нужно указать, например, сколько объектов Roamer и Chaser вы хотите получить заранее, а не только сколько объектов Enemy вам может понадобиться.Кроме того, вызовы виртуальных функций для обновления могут быть медленными.
Одна альтернатива, о которой я подумал, - это просто объединить все эти классы в один, например,
class Enemy
{
int direction;
Player target;
int type; // i.e. ROAMER_TYPE, CHASER_TYPE
}
. Тогда я бы получил обновлениефункция, которая проверила переменную "type" и обновила соответственно.Это, очевидно, более C-подобный подход.Хотя это кажется хакерским, потому что, например, у врага-странника будет переменная «target», которую он никогда не использует.У меня вряд ли будет более 100 врагов в памяти за раз, хотя на самом деле это не имеет большого значения для памяти.Я просто хочу найти компромисс между красивым кодом и скоростью.
Есть ли у кого-нибудь комментарии о том, как лучше всего это структурировать?Занимается ли слияние таких классов слишком далеко?Это хорошая идея?Должен ли я просто использовать обычное дерево классов?
Я знаю, что нет правильных ответов на этот вопрос, но я хотел бы иметь несколько других точек зрения.