Cocos2d iphone 如何在它之前获得CCSprite的大小';它初始化了吗?

Cocos2d iphone 如何在它之前获得CCSprite的大小';它初始化了吗?,cocos2d-iphone,cocosbuilder,Cocos2d Iphone,Cocosbuilder,我正在用cocos2d和objective-c编写一个简单的游戏。在这个游戏中,我给敌人的精灵随机的位置。为了避免不同敌人的重叠,我写了一个检查,以确保新精灵的CGRect及其随机位置不与任何其他精灵的CGRect重叠 我的问题是如何在初始化新的精灵之前获得CGRect的大小?如果您使用ccbi文件(cocosbuilder)来初始化精灵,您将如何做到这一点 我之前做的是,在初始化新的精灵之前,我用png文件初始化了一个临时精灵,它显示了敌人的第一帧(每个帧都有相同的大小)。然后使用如下大小:t

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

我的问题是如何在初始化新的精灵之前获得CGRect的大小?如果您使用ccbi文件(cocosbuilder)来初始化精灵,您将如何做到这一点

我之前做的是,在初始化新的精灵之前,我用png文件初始化了一个临时精灵,它显示了敌人的第一帧(每个帧都有相同的大小)。然后使用如下大小:tempsrite.boundingBox。虽然它工作得很好,但我认为在初始化每个新的敌人精灵之前制作一个临时精灵是不有效的


现在我正在尝试使用cocosbuilder转换我的游戏(因为使用ccbi文件可以更容易地调整动画)。如何在初始化之前知道精灵的大小?我想我仍然可以使用[CCBReader nodeGraphFromFile:@“enemySprite.ccbi”]制作一个tempsrite,并使用tempsrite.boundingBox获得其大小。但这是正确的方法吗?这对CPU和内存资源来说是非常浪费的。更新:我尝试了我的方法,但没有成功。因为边界框大小值是(0,0)(位置值是正确的)。

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


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

精灵是否已经进行了批处理和缓存?如果是这样,那么它将不需要额外的资源来初始化以获得大小。是的,我可以从png文件中获得正确的大小,例如第一帧。然而,我有另一个问题。因为ccbi文件的大小是0,所以我不能触摸它(触摸纹理不会被视为“触摸”)。