Я полностью программист Objective-C, и мне нужен совет, как лучше структурировать проект, над которым я работаю.
Я имею дело с CCSprite
, .tags
и некоторыми общими проблемами структуры программы, из-за которых у меня возникают проблемы с поиском наилучшего способа структурирования программы.
На данный момент программа работает именно так, как я хочу, но похоже, что я теряю строки кода и чрезмерно избыточен. Я хочу избавить себя от проблем в будущем и сделать все сразу.
В сущности, я создаю полностью анимируемого фальсифицированного персонажа из CCSprites
. Мне нужно, чтобы каждая часть его тела оживлялась независимо от других частей тела. Чтобы добиться этого, я создал метод, который я вызываю в методе -init
моего CCScene
, который проходит через него и создает CCSprites
и связывает их с соответствующей частью. Вот код для метода:
-(void) characterInit{
CGSize size = [[CCDirector sharedDirector] winSize];
//Torso
CCSprite * torso = [CCSprite spriteWithFile:@"Torso.png"];
torso.anchorPoint = ccp(.5, .5);
torso.position = ccp(size.width/2, size.height/2);
torso.scale = 1;
torso.tag = torsoTag;
[self addChild:torso];
//Head
CCSprite * head = [CCSprite spriteWithFile:@"Head.png"];
head.anchorPoint = ccp(.5, 0);
head.position = ccp(50,60);
head.tag = headTag,
[torso addChild:head z:1];
//Eyes
CCSprite * eyes = [CCSprite spriteWithFile:@"Eyes.png"];
eyes.anchorPoint = ccp(.5, .5);
eyes.position = ccp(35, 45);
eyes.color = ccc3(255, 255, 255);
eyes.tag = eyesTag;
[head addChild:eyes];
...
...
...
... это продолжается для каждой части тела.
Ключевым моментом здесь является то, что я использую просто старые int
с числовым значением для .tag
для каждого CCSprite
. Я объявляю int
над этим методом вне любых других методов, чтобы они были доступны и внутри метода init
.
Вопрос 1: Что может быть лучше для этого? Может быть, как enum
? Как бы выглядел этот код, и есть ли лучший способ генерировать этот код, а не просто записывать каждое значение, как я делал, когда у меня их было int
s?
Теперь мой следующий вопрос приходит после того, как я прошел и создал все CCSprites
. Когда я хочу использовать их вне метода, в котором я их создал, я использую такой код из моего init
метода:
CCSprite * torso = (CCSprite *) [self getChildByTag:torsoTag];
CCSprite * head = (CCSprite *) [torso getChildByTag:headTag];
CCSprite * eyes = (CCSprite *) [head getChildByTag:eyesTag];
[eyes runAction:...];
Изначально я пытался просто позвонить ...
CCSprite * eyes = (CCSprite *) [self getChildByTag:eyesTag];
... но безрезультатно. Я предполагал, что смогу вызвать эту отдельную часть тела без необходимости вызывать каждого родителя этой части тела, чтобы я мог оживить ее. потому что ... ну ...
Это Отстой.
Дело в том; Я чувствую, что просто неправильно об этом думаю. Я хочу организовать свой код, но суть организации в том, что вам не нужно быть избыточным.
Вопрос 2: Что мог бы сделать лучший программист, чем я, чтобы справиться со всей этой чокнутой ситуацией?
Спасибо за ваше время, ребята, и извините за СТЕНУ ТЕКСТА .