iphone - 我需要像程序员一样思考 : Childs and Parents in Cocos2d, 程序结构、枚举等

标签 iphone objective-c coding-style cocos2d-iphone

我是一名完全自学成才的 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/

相关文章:

ios - 如何一一删除MKAnnotation Pin?

ios - UNNotificationServiceExtension 偶尔更新通知失败

ios - block 中的弱指针为零

iphone - 升级到 iPhone 3.0 sdk,现在模拟器显示黑屏

ios - 获取现有 UILocalNotifications 的列表并修改它们的日期

java 到 objective c 和 malloc

java - 如何在方法中编写嵌套 for 循环(干净的代码)

iphone - 只有图像作为 UITabBarItem

javascript - 是否存在适用于 Google 的 HTML/CSS/JS 样式指南的验证器/linter?

JavaScript:将所有内容包装在变量中是否有任何优势?