У вас должен быть класс Enemy, который содержит свойства определенных врагов и не зависит от типа (например, позиция, текущее состояние здоровья, экземпляр CCSprite?) И класс EnemyType, который содержит свойства, которые являются общими для всех врагов определенного типа. (Максимальное здоровье, максимальная скорость, размер, имя файла спрайта). Вы должны загрузить типы врагов до загрузки уровня, а затем создать экземпляр каждого врага, используя соответствующий тип в конструкторе.
Например, если ваш вражеский элемент в файле уровня выглядит следующим образом
<enemy><type>spider</type>...more properties...</enemy>
Код (псевдо) будет делать что-то вроде
EnemyType *enemyType = nil;
if (typeElement.value == "spider")
{
enemyType = spiderType;
}
Enemy *newEnemy = [Enemy enemyWithType:enemyType];
Также класс Enemy должен содержать представляющий его CCSprite, а не подкласс. Враг не является спрайтом, поэтому, если я что-то упустил, как я вижу, враг не должен наследовать от спрайта. Я бы прочитал о когда содержать и когда наследовать .
EDIT:
Еще один приятный пост для чтения , который кажется очень актуальным и может рассказать о некоторых вещах, вероятно, лучше, чем я.
В любом случае, я не хотел заставить вас думать, что вам следует просто переосмыслить весь свой дизайн. То, что я предлагаю, «лучше» в отношении MVC, но это не значит, что оно лучше для вашей игры. Если вы будете тратить все свое время на «правильность дизайна», вы никогда не закончите игру, особенно если вы только изучаете фреймворк cocos2d, я фактически делал проект обучения не так давно, и сам Стив Макконнел придет и шлепни меня, если он это увидел.
Если вы работаете над игрой в одиночку, и это небольшой проект, оставьте подкласс, если он будет более управляемым для вас, все, включая «правильность дизайна», должно быть должным образом оценено (кроме, возможно, использования »). goto "заявления :))