0

編集(追加テスト後の短いバージョン): 追加しただけです:

        CGSize winSize = [[CCDirector sharedDirector] winSize];
        CCRenderTexture *rt = [CCRenderTexture renderTextureWithWidth:winSize.width height:winSize.height];

ゲーム プロジェクト( BulletCacheのインスタンスが追加されたGameScene がある) の BulletCache にアクセスすると、ゲームシーン インスタンスを読み込もうとしているときにアプリがクラッシュするようになりました (以前はこのクラッシュで問題はありませんでした)。

注: CCRenderTexture の init メソッドにブレークポイントを追加しましたが、スムーズに実行されているように見えます。init の後にある必要があります。

逆に、GameScene の init メソッドで同じことを試しましたが、アプリはクラッシュしません。空の cocos2d-ios helloworld テンプレート プロジェクトに追加した場合も同様です。

したがって、cocos2d-ios helloworld テンプレートで、batchnode と CCRenderTexture インスタンスを持つことで競合が発生するかどうかを確認するために追加のテストを行い、helloworldlayer.m init メソッドの最後に次を追加しました。

    CCSpriteFrameCache* frameCache = [CCSpriteFrameCache sharedSpriteFrameCache];
    [frameCache addSpriteFramesWithFile:@"art1-hd.plist"];
    CCSpriteBatchNode*  spriteBatch = [CCSpriteBatchNode batchNodeWithFile:@"art1-hd.png"];
    [self addChild:spriteBatch];

    CGSize winSize = [[CCDirector sharedDirector] winSize];        
    CCRenderTexture *rt = [CCRenderTexture renderTextureWithWidth:winSize.width height:winSize.height];
    [self addChild:rt];

クラッシュはありませんでした。

これを解決する方法については、多くの接着剤が残っていません。

編集: CCRenderTexture を見つけた pixelperfect 衝突プロジェクトについて言及した元の質問を削除しました

4

1 に答える 1

0

おそらく問題は、元のコードが各スプライトが独自のテクスチャを使用することを想定していることです。これで、テクスチャアトラスがある場合、各スプライトはそのテクスチャのより小さな領域(rect)からのみレンダリングされます。テクスチャのスプライトフレームの部分に応じて、衝突テストを初期化する必要があります。

全体として、スプライトフレームとテクスチャアトラスを使用してピクセルパーフェクトな衝突検出を行うことは可能ですが、衝突テストの実際の実装によってはさらに複雑になります。

于 2012-10-20T20:28:10.710 に答える