【问题标题】:Can't access CCNode as child of scene无法将 CCNode 作为场景的子节点访问
【发布时间】:2014-02-14 10:30:33
【问题描述】:

我对 spriteBuilder 和 cocos2d 非常陌生,这意味着我相当肯定我做错了什么......我只是不知道是什么。

我已将 CCNode 添加到“关卡场景”中,并将其作为子场景加载到“游戏场景”中,但我似乎无法弄清楚如何引用关卡场景中的 CCNode .

有点像这样:

游戏场景(CCScene) Level1 场景(CCScene) 目标(CCNode)

然后在我的代码中:

gameplay = [CCBReader loadAsScene:@"Levels/Level1"];

然后我想获得我放置在关卡内的目标的位置。我该怎么做?它有一个“doc root var”,但我只能在自定义的“target”类中访问它。我如何访问内部游戏?这段代码在游戏中运行时给我 {0, 0},但在目标类中运行时给我 {393, 193}。

NSLog(@"Target pos = %@", NSStringFromCGPoint(_target.position));

如果这令人困惑,我很抱歉,我会尽量让它更清楚。抱歉,如果这是一个愚蠢的问题,我才刚刚开始。

感谢所有帮助。

编辑:在游戏中记录 [自己的孩子]:

("<CCSprite = 0x993e670 | Rect = (0.00,0.00,500.00,281.50) | tag =  | atlasIndex = -1>",
"<CCSprite = 0x9c9a350 | Rect = (68.00,0.50,32.00,25.50) | tag =  | atlasIndex = -1>",
"<CCPhysicsNode = 0xba3a220 | Name = >",
"<CCButton = 0x9c9db20 | Name = >",
"<CCButton = 0x9ca33e0 | Name = >",
"<CCLabelTTF = 0x9ca5320 | FontSize = 50.0>",
"<CCButton = 0x9ca6010 | Name = >",
"<CCButton = 0x9ca7f50 | Name = >",
"<CCSlider = 0x9caa060 | Name = >",
"<CCLabelTTF = 0x9caeed0 | FontSize = 16.0>",
"<CCLabelTTF = 0x9cafa10 | FontSize = 15.0>",
"<CCSprite = 0x9cb02f0 | Rect = (107.50,29.00,75.00,64.50) | tag =  | atlasIndex = -1>",
"<CCSprite = 0x9cb08c0 | Rect = (107.50,29.00,75.00,64.50) | tag =  | atlasIndex = -1>",
"<CCSprite = 0x9cb0e90 | Rect = (107.50,29.00,75.00,64.50) | tag =  | atlasIndex = -1>",
"<CCLabelTTF = 0x9cb1460 | FontSize = 50.0>")

【问题讨论】:

  • 我的朋友没有愚蠢的问题! :),首先要检查的是您的_target 是否正确加载?它是 nil 还是你想要的实际精灵?你可以试试NSLog(@"%@", _target),告诉我们你看到的是什么类型的CCNode?​​span>
  • 当然!在我的“target.h”类中,它给出“”,在我的gameplay.h中给出“(null) ”。 (在 spritebuilder 中,我在 target.ccb 中的 sprite 具有自定义类“Target”和 doc root var“_target”)
  • 这就是问题所在,_targetnull... 在 gameplay 你如何初始化 _target ?可能这就是错误所在!你能从gameplay 实现中添加一个sn-p 吗?
  • 大概就是这样。我想如果我包含我的 Target.h 类并在那里初始化它,我也可以从父级访问它。在 target.h 我做“CCNode * _target;”然后只是 "NSLog(@"%@", _target);"在 .m 文件中。我可以将它作为一个孩子添加到游戏中它已经在的相同位置吗?
  • 是的,当然可以,您只需要在gameplay 类中使用[self children] 找到它,但这就是为什么首先制作自定义类,以避免需要这样做之后,如果不查看更多代码,就很难看出错误在哪里,但是在游戏中NSLog(@"%@", [self children]); 的输出是什么?

标签: objective-c cocos2d-iphone spritebuilder


【解决方案1】:

我解决了。似乎因为我有这样的层次结构: gamePlay->levelNode->level1

我必须这样做才能设定我的目标:

_target = [[levelNode getChildByName:@"level1" recursively:false] getChildByName:@"target" recursively:false];

至少现在似乎已经解决了。 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-15
    • 1970-01-01
    • 1970-01-01
    • 2016-04-22
    • 1970-01-01
    相关资源
    最近更新 更多