2013-06-17 2 views
0

Итак, у меня есть игра, в которой я работаю над использованием cocos2d. В игре задействовано много вражеских снарядов, а также несколько дружественных снарядов для столкновения с вражескими снарядами.Оптимизация производительности - Кэш объектов

Оба противника и дружелюбные снаряды объекты, обладающие свойствами, такие как:

  • спрайт (используется для CCMoveTo, действия)
  • хитбокса (CGRect)
  • длительности путешествия
  • траектория

У этого также есть методы для расчета времени в пути, траектории и других вещей, которые определяются на основе случайное место появления.

В настоящее время я создаю эти объекты каждый раз, когда создается снаряд, добавляя их в массивы (т. Е. FriendlyProjectiles, enemyProjectiles), итерации через них для обнаружения столкновений и отпускания объекта при столкновении.

Было бы лучше использовать кеш для объектов здесь?

Например:

  • при запуске создать 100 объектов снаряда противника, 5 дружеского снаряда Объекты
  • места этих объекты на стеке
  • когда снаряд породившие, вместо того, чтобы создать объект, я pop из стека
  • , когда снаряд сталкивается и разрушается, вместо того, чтобы отпускать объект, я просто удаляю его из слоя и массива и нажимаю его обратно на стек
  • когда возникает снаряд, мне еще нужно рассчитать его траекторию, скорость, расстояние и т. д., но мне не нужно воссоздать объект

Это хороший подход?

Я относительно новичок в Objective C, столкнулся бы с проблемами, когда я пытаюсь одновременно нажать и вытащить в стек?

+0

Ваши снаряды являются подклассом CCSprite, или у вас есть CCSprite? если бы вы были подклассом, вы могли бы просто добавить их в свой прожектор, а затем удалить их, когда диктует ваша физическая логика. –

+0

Снаряды в настоящее время не являются подклассом CCSprite, но каждый из них имеет CCSprite в качестве свойства. – NMunro

+0

если симулятор отстает, то могу с уверенностью сказать, что на устройстве будет плохо. –

ответ

2

Главный вопрос, который вы должны задать:

Есть ли проблема производительности с тем, как вы делаете это сейчас?

Если нет, то зачем усложнять ситуацию.

Если есть проблема, то профиль приложения, чтобы узнать, есть ли проблема.
Если это так, то да, это звучит как разумный подход.

+0

Я все еще жду, чтобы получить реальный iPad для тестирования, но симулятор отстает, когда я получаю большое количество снарядов. Симулятор пытается эмулировать вычислительную мощность реального устройства или зависит от моего оборудования? – NMunro

+0

Симулятор зависит от вашего оборудования и, как правило, быстрее, чем фактический iPad. – lnafziger

+0

У меня i5 3570k на 4.7 ГГц, поэтому я бы сказал, что мне нужно оптимизировать свою работу. – NMunro

Смежные вопросы