Так что я определенно думаю, что нам нужно сначала кое-что рассмотреть.
1.) LL vs. Array
Вы сказали, что использовали LL вместо массива из-за динамического свойства, которое дает вам LL. Тем не менее, я хотел бы сказать, что вы можете сделать использование массива достаточно динамичным, удвоив его размер после заполнения, что даст вам O (1) время выполнения вставки амортизируется (учитывая, что массив не сохраняется / не сортируется). Тем не менее, будет сценарий, в котором время от времени вставка может занять O (n), поскольку вы должны соответствующим образом копировать данные. Так что для живых игр, подобных этой, я считаю, что LL был хорошим выбором.
2.) Ваше рассмотрение памяти с точки зрения игровых объектов.
Это сильно зависит от структуры каждого GameObject, о которой вы не предоставили достаточно подробную информацию. Если каждый GameObject содержит только пару целочисленных или примитивных типов, есть вероятность, что вы можете позволить себе память. Если каждый GameObject очень дорогостоящий, и вы используете очень большую сетку, то это определенно будет стоить тонны памяти, но это будет зависеть как от использования памяти каждого GameObject, так и от размера сетки.
3.) Если разрешение отличается от 480x800, не беспокойтесь. Если вы используете сетку 6x10 для всего, рассмотрите возможность использования множителя плотности следующим образом:
float scale = getContext().getResources().getDisplayMetrics().density;
, а затем getWidth () и getHeight () должны быть умножены на этот масштаб, чтобы получить точную ширину и высоту устройства, которое использует ваше приложение. Затем вы можете разделить эти числа на 6 и 10. Однако обратите внимание, что некоторые сетки могут выглядеть некрасиво на некоторых устройствах, даже если они правильно масштабируются таким образом.
4.) Обработка столкновений
Вы упомянули, что занимались обработкой столкновений. Хотя я не могу сказать, что является лучшим способом справиться с этим в вашей ситуации (я все еще в некотором замешательстве, как вы на самом деле делаете это, основываясь на вашем вопросе), имейте в виду следующие варианты:
a.) Линейный зонд
б.) Отдельная цепочка
в.) Двойное хеширование
, все из которых, по общему признанию, являются хэш-стратегиями обработки столкновений, но могут быть реализованы с учетом вашей игры (о которой, опять же, вы узнали бы больше, поскольку сохранили некоторую информацию). Тем не менее, я скажу, что если вы используете сетку, вы можете захотеть сделать что-то по линии линейного зондирования или создать 2 хэш-таблицы вместе (если это уместно, но, похоже, это убирает макет сетки, который вы пытаетесь использовать) добиться, так что, опять же, на ваше усмотрение). Также обратите внимание, что вы можете использовать какое-то дерево (например, quadtree) для более быстрого обнаружения столкновений. Если вы не знаете о quadtree, проверьте их здесь . Хороший способ думать об этом - разделить квадратное изображение на отдельные пиксели на листьях и сохранить средние цвета в родительских узлах для сокращения . Просто способ помочь вам осмысленно думать о квадри.
Надеялся, что помог. Опять же, может быть, я что-то неправильно понимаю из-за расплывчатого характера вашего вопроса, поэтому дайте мне знать. Я был бы рад помочь.