Я использую cocos2d для создания игры для iPhone.В основном это сделано, но по пути я столкнулся с некоторыми вещами, с которыми я хотел бы справиться лучше.Я довольно новичок в Objective C, и, честно говоря, я делаю больше сценариев Perl в своей повседневной работе, чем что-либо еще, поэтому мои навыки в C немного устарели.
Одним из них является тот факт, что у меня естьмодифицированные файлы cocos2d для некоторых особых случаев в моей игре.Однако, когда я обновляюсь до новой версии, мне приходится вручную выдвигать свои изменения.
Итак, вопрос в том, как лучше всего с этим справиться?
Некоторые варианты, о которых я подумал:
- Перегрузка / переопределение классов cocos2d.У меня сложилось впечатление, что я не могу перегрузить существующие функции класса, поэтому я не думаю, что это сработает.
- Создание патчей, которые я повторно применяю после обновлений библиотеки.Я не думаю, что это будет работать, так как новые файлы не обязательно будут такими же, как старые, и если бы они были, я мог бы просто скопировать весь файл вперед.
- Включите мои изменения в Cocos2d,Не вариант, так как мои изменения очень специфичны для моего приложения.
Я что-то упускаю из виду?
ОБНОВЛЕНИЕ:
Я будуобъясните, что я делаю, чтобы быть более ясным.
Cocos2d имеет объект CCNode, который может содержать дочерние элементы и т. д. Я добавил тень, которая очень похожа на дочернюю, но обрабатывается немного по-другому.Тень имеет смещение от родителя и перемещается вместе со своим родителем, вращается вокруг своего собственного центра при вращении родителя и т. Д. Однако тень не является истинным дочерним элементом, поэтому при правильном z-индексе тени могутвизуализировать под ВСЕМИ другими объектами, но все еще перемещать вместе с родителем.
Для этого я добавил addShadow
функции в CCNode и изменил функции setPosition
и setRotate
, чтобы переместить shadowSprite:
CCNode.m:
-(id) init
{
if ((self=[super init]) ) {
...
shadowSprite_ = nil;
...
}
}
...
-(BOOL) addShadow: (CCNode*) child offset: (CGPoint) offset
{
shadowSprite_ = child;
shadowSprite_.position = CGPointMake(position_.x+offset.x, position_.y+offset.y);
return YES;
}
...
-(void) setRotation: (float)newRotation
{
rotation_ = newRotation;
isTransformDirty_ = isInverseDirty_ = YES;
if(shadowSprite_) {
[shadowSprite_ setRotation: newRotation];
}
}
Конечно, есть и другие, включая прототипы в файле .h, но это основы.Я не думаю, что мне нужно shadowSprite, чтобы быть свойством, потому что мне не нужно обращаться к нему после того, как оно было добавлено.