1

目前我正在开发一个带有场景的游戏,其中有一块带有字母的瓷砖。由于它们在动态板上的定位和“字母值”,它们在运行时被放置。

CCScene (fullscreen)
  CCLayer (board)
    CCNodes (tiles)

我制作了一个名为 Tile.ccb 的 ccb 文件。这是一个带有背景渐变和 TTF 层的小而简单的 CCNode。CCNode 有一个名为“Touched”的时间线,其中包含一个短动画,当用户触摸磁贴时应该播放该动画。该节点还有一个自定义类集。(STTile)

目前我正在通过这种方法以编程方式加载每个图块:

+ (STTile *)tileWithLetter:(NSString *)letter onRow:(int) x andCol: (int) y;
{
    STTile *tile = (STTile *)[CCBReader nodeGraphFromFile:@"Tile.ccbi"];
    tile.letterLabel.string = letter;
    tile.x = x;
    tile.y = y;
    return tile;
}

它为棋盘上的位置创建并返回一个新图块。在 Cocos2D (Objective-C) 中,STTile 是 CCNode 的子类。

瓷砖显示和 letterLabel 可以调整得很好。但是,播放动画“触摸”不起作用。以下代码是 STTile 的一部分,用于在触摸时播放动画/序列:

CCBAnimationManager *animationManager = self.userObject;
[animationManager runAnimationsForSequenceNamed:@"Touched"];

'self.userObject' 值(保存 CCAnimationManager)为 NULL,因为它在加载后立即被 [CCBReader nodeGraphFromFile]“清理”。这是设计使然吗?如果是这样,为什么?当 tile 节点在“设计时”放置在“板”层时,相同的动画代码可以正常工作,如 CocosDragon 示例中所示。(CCB 中的 CCBFile 引用)

应该如何在运行时创建 CCB 节点的多个实例,并且仍然能够在它们上运行动画?在设计时放置节点并不总是一种选择。提前致谢!

4

1 回答 1

0

@Matthijn 是对的!谢谢!

在我的情况下,它是由于 CocosBuilder 中的自定义类名称与我的代码之间的类名不一致造成的:

注意自定义类的名称

于 2013-09-25T15:24:42.560 回答