目前我正在开发一个带有场景的游戏,其中有一块带有字母的瓷砖。由于它们在动态板上的定位和“字母值”,它们在运行时被放置。
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 节点的多个实例,并且仍然能够在它们上运行动画?在设计时放置节点并不总是一种选择。提前致谢!