0

編集5:最適化レベルのビルド設定:

ビルド設定

編集4:ビルド構成を変更して、すべてを「デバッグ」にしてから「テスト」のために実行しようとしました。奇妙なことに、約20回はクラッシュしませんでした(さまざまなアセットを使用してさまざまなGameScenesのロードとアンロードを続けました)。21回目(統計的に関連性がなくても)、もうクラッシュしないかもしれないと思っていましたが、クラッシュしました。要約はまだ利用できないので、私はそれを正しく行っているのか、それとも他の問題があるのか​​疑問に思っています。ビルド構成とクラッシュレポートは次のとおりです。

構成

まだ何が起こっているのか

編集3:重要なことに、このバグは6/7回に1回の実行など、ごく一部しか発生しないため、特定するのは困難です。

どのテクスチャがこのNSAssertを失敗させているのかを理解するのに深刻な問題があります。私はいくつかのアプローチを試しましたが、どれもうまくいきませんでした(またはおそらく私だけが少し愚かすぎます:))。

デバッガーでは、GLuint情報を確認できます。インターネットで読んだところ、それがフレーム(一種のポインター)を参照する方法であることがわかりました。

batchNode plistファイルからフレーム名を取得する方法があるはずだと思い、このGLuint番号がplistファイル内のフレームの順序に何らかの形で対応できるかどうか疑問に思いました。

NSAssert( !batchNode_ || texture.name == batchNode_.texture.name , @"CCSprite: Batched sprites should use the same texture as the batchnode");

/** texture name */
@property(nonatomic,readonly) GLuint name;

私はそれらのアプローチを試しましたが、それらはすべてのケースを捕らえます:

//From CCSprite.m
-(void) setTexture:(CCTexture2D*)texture
{

    if(!batchNode_ || texture.name != batchNode_.texture.name)
    {
CCLOG(@"");     // I added a debug here but it catches all cases..
        NSAssert( !batchNode_ || texture.name == batchNode_.texture.name , @"CCSprite: Batched sprites should use the same texture as the batchnode");
    }

編集:私はちょっとクレイジーだと知っていますが、正しく初期化できないように見えるので、CCTexture2DでfileNameを初期化する試みを貼り付けます:

- (id) initWithString:(NSString*)string dimensions:(CGSize)dimensions hAlignment:(CCTextAlignment)hAlignment vAlignment:(CCVerticalTextAlignment) vAlignment lineBreakMode:(CCLineBreakMode)lineBreakMode font:(UIFont*)uifont
{
    NSAssert( uifont, @"Invalid font");
    fileName=string;//TODO: Remove
    .....
}

上記のものは、私が変更できた唯一のinitWithStringです。この他の1つのfileNameプロパティを変更することはできません:

#elif defined(__CC_PLATFORM_MAC)

- (id) initWithString:(NSString*)string dimensions:(CGSize)dimensions hAlignment:(CCTextAlignment)hAlignment vAlignment:(CCVerticalTextAlignment)vAlignment attributedString:(NSAttributedString*)stringWithAttributes

編集2:fileNameを次のように割り当てようとしました:

fileName = [string copy];

しかし、ここで報告されているように、それでも要約は利用できません。

永続的な問題

問題はアニメーションの更新中にsetTextureで発生するようですが、fileNameは元々間違っているようです。

これが、CCTexture2Dでプロパティを宣言した方法です。

@property(nonatomic, copy) NSString* fileName; //TODO Remove
4

0 に答える 0