【问题标题】:Unable to cast CCScene无法投射 CCScene
【发布时间】:2014-06-04 13:46:44
【问题描述】:

我正在尝试加载 CCScene,然后在使用场景之前更改它的一些属性。当我尝试更改它的属性时,它显示 [CCScene setProperty] - 无法识别的选择器发送到实例,即使我将 CCScene 转换为具有公共属性的正确类!

#import "MainScene.h"
#import "Gameplay.h"

@implementation MainScene
-(void)play:(CCButton *)sender{
    Gameplay *gameplay = (Gameplay *)[CCBReader loadAsScene:@"Gameplay"];
    NSLog(@"%@\n",[gameplay class]);
}
@end

此代码输出 CCScene 而不是输出 Gameplay。我该如何解决这个问题?

【问题讨论】:

    标签: ios objective-c cocos2d-iphone ccscene


    【解决方案1】:

    这不是演员表的问题。 如果您执行loadAsSceneCCBReader 会将 Gameplay.ccb 根节点包装到场景中。 您可以在文档中阅读:

    ... 加载具有指定名称的 ccbi 文件并将其包装在 CCScene 节点中。

    如果使用控制台打印该节点的子节点:

    (lldb) po scene.children
    

    你会得到以下结果:

    <__NSArrayM 0x13a38720>(
      <Gameplay = 0x13a3f8a0 | Name = >
    )
    

    这显示了您的游戏类是如何包装到 CCScene 中的。 如果要访问Gameplay 节点,则需要访问CCScene 的第一个子节点:

        Gameplay *gameplay = (Gameplay *)[[CCBReader loadAsScene:@"GameplayScene"] children] [0];
    

    您可以随意使用一种不同的解决方案,该解决方案不会在一行中完成所有工作。

    【讨论】:

      【解决方案2】:

      你也可以使用

      SceneClass *sceneInstance = [CCBReader load:NSStringFromClass([SceneClass class])];
      

      这会导致:

      (lldb) po sceneInstance
      <SceneClass = 0x8270b70 | Name = >
      

      【讨论】:

        猜你喜欢
        • 2017-03-17
        • 2012-04-29
        • 2012-08-23
        • 2013-10-04
        • 1970-01-01
        • 2020-10-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多