我是一名完全自学成才的 Objective-C 程序员,我需要有关如何最好地构建我正在开发的项目的建议。
我正在处理 CCSprite
、.tags
和一些一般程序结构问题,我无法找出构建结构的最佳方法该程序。
到目前为止,程序正在按照我想要的方式运行,但看起来我浪费了代码行并且过于冗余。我想在未来为自己省去一些麻烦,并提前完成所有事情。
我本质上是用CCSprites
创建一个完全可动画的装配角色。我需要他 body 的每个部分独立于其他 body 部分进行动画制作。为了实现这一目标,我创建了一个在 CCScene
的 -init
方法中调用的方法,该方法会遍历并创建 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];
...
...
...
...每个 body 部位都会继续这样。
这里的关键是,我只使用普通的旧 int
,并为每个 CCSprite
的 .tag
提供一个数值。我在该方法上方、任何其他方法之外声明了 int
,以便它们也可以在 init
方法内部访问。
问题 1:更好的方法是什么?也许作为枚举
?该代码会是什么样子,有没有更好的方法来生成该代码,而不是像我将它们作为 int
时那样写出每个值?
现在,在我完成并创建了所有 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];
...但无济于事。我假设我能够调用这个单独的 body 部位,而不必调用该 body 部位的每个父级,以便我可以为其设置动画。因为……嗯……
那很糟糕。
重点是;我觉得我只是错误地思考这个问题。我想组织我的代码,但组织的重点是让您不必变得多余。
问题 2:一个比我更好的程序员会做什么来处理这整个奇怪的情况?
感谢大家抽出时间,对文字墙表示歉意。
最佳答案
您可以忘记整个标签
业务并将 Sprite 存储为类的实例变量。
@interface MyClass : MyParentClass {
@private
CCSprite *torso;
CCSprite *head;
CCSprite *eyes;
}
...
@end
你的方法会更简单一点:
-(void) characterInit{
CGSize size = [[CCDirector sharedDirector] winSize];
//Torso
torso = [CCSprite spriteWithFile:@"Torso.png"];
torso.anchorPoint = ccp(.5, .5);
torso.position = ccp(size.width/2, size.height/2);
torso.scale = 1;
[self addChild:torso];
...
并且你可以直接使用你的 body 部位:
[eyes runAction:...];
关于iphone - 我需要像程序员一样思考 : Childs and Parents in Cocos2d, 程序结构、枚举等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8958406/