0

我正在使用带有objective-c 的cocos2d 编写一个简单的游戏。在这个游戏中,我给敌方精灵随机的位置。为了避免不同敌人的重叠,我写了一个检查以确保新精灵的随机位置的 CGRect 不与任何其他精灵的 CGRect 重叠。

我的问题是如何在初始化新精灵之前获得 CGRect 的大小?如果你使用 ccbi 文件(cocosbuilder)来初始化精灵,你会怎么做呢?

我之前做的是在初始化新的精灵之前,用png文件初始化一个临时的精灵,里面显示了敌人的第一帧(每一帧大小都一样)。然后像这样使用它的大小:tempSprite.boundingBox。虽然效果很好,但我认为在初始化每个新的敌人精灵之前制作 tempSprite 效率不高。

现在我正在尝试使用 cocosbuilder 转换我的游戏(因为使用 ccbi 文件可以更轻松地调整动画)。在初始化之前如何知道精灵的大小?我想我仍然可以使用 [CCBReader nodeGraphFromFile:@"enemySprite.ccbi"] 制作一个 tempSprite,并使用 tempSprite.boundingBox 来获取它的大小。但这是正确的方法吗?感觉对 CPU 和内存资源非常浪费。更新:我尝试了我的方法,但它不起作用。因为boundingBox大小值是(0,0)(位置值是对的)。

4

1 回答 1

0

我自己找到了解决方案。问题是因为我误解了ccbi文件创建的实例的结构。它是一个以 CCSprite 作为变量的 CCNode,而不是简单的 CCSprite。CCNode 的大小为 (0,0)(它作为 CCSprite 的容器),并且 CCSprite 具有正确的大小和正确的位置。

我在 CocosBuilder 中为 CCSprite 分配了一个 CCSprite* 变量。并使用 CCSprite.boundingBox 检查碰撞。这解决了所有问题。

于 2013-10-10T10:43:35.133 回答