如何使用CCSprite的自定义类?

时间:2014-05-14 16:37:38

标签: cocos2d-iphone spritebuilder

我正在尝试为此做教程:

https://www.makegameswith.us/gamernews/384/build-your-own-2048-with-spritebuilder-and-cocos2d

我想为上面的教程添加CCSprite。我在Spritebuilder中布置了CCSprite并首先关闭了它们的可见性。当出现相应的图块时,只有CCSprite才可见。例如,当Tile A首次出现时,将出现CCSprite A.当Tile A与另一个Tile A合并时,将出现Tile B,CCSprite B也会出现,依此类推。

问题是用于确定tile值的switch case位于Grid.m,但添加到Spritebuilder的CCSprite位于MainScene类的CCNode下。如果我没有为CCSprite设置自定义类,XCode就无法找到成员变量。如果我把自定义类" Grid"对于CCSprite,XCode将返回"该类不是键值spriteFrame的键值编码兼容。"我该怎么办?

1 个答案:

答案 0 :(得分:3)

假设在您的CCB中,根节点是CCNode(A)并且您向其添加子CCSprite(B),然后:

  • 如果指定,则节点A的自定义类必须是CCNode的子类
  • 如果指定,则节点B的自定义类必须是CCSprite的子类

关于变量赋值:

  • 节点A的变量应为空(最多会创建对自身的引用)
  • 如果需要,节点B的变量应设置为“doc root”并给出合法的ObjC变量名称(即_nodeB

现在,当您设置节点B的自定义var并将其设置为“doc root”时,必须将相应命名的属性或ivar添加到节点A的自定义类。这意味着节点必须具有“doc root”变量的自定义类才能工作。我们将其命名为CustomClassA

@interface CustomClassA : CCNode
{
    CCSprite* _nodeB;
}
@end

假设您使节点B使用自定义类(继承自CCSprite),您还可以指定自定义类:

@class Grid;

@interface CustomClassA : CCNode
{
    Grid* _grid;
}
@end

并将#import CCSpriteCustomClassB.h添加到CustomClassA的实施文件中。

请注意,变量赋值在您输入变量名称的节点中不使用自定义类时可以正常工作,但根节点必须使用自定义类来进行变量赋值。

PS:我对“所有者”变量设置并不完全清楚。通常所有者将为nil,当您使用CCBReader的load:owner:方法在代码中指定它时,它只是非零。这有一些目的,但我目前还没有发现也无法想到它的用例。