0

私はcocos2dとobjective-cを使って簡単なゲームを書いています。このゲームでは、敵のスプライトにランダムな位置を与えます。異なる敵が重ならないように、新しいスプライトの 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 ではなく、CCSprite を変数として持つ CCNode です。CCNode のサイズは (0,0) (CCSprite のコンテナーとして機能します) で、CCSprite は正しいサイズと正しい位置を持っています。

CocosBuilder で CCSprite* 変数を使用して CCSprite を割り当てました。CCSprite.boundingBox を使用して衝突をチェックします。これですべての問題が解決します。

于 2013-10-10T10:43:35.133 に答える