2012-03-05 11 views
0

グラフィックスに大きなピクセルアートを使用するゲームを作っています。スプライトごとにsprite.scale = 2;[sprite.texture setAliasTexParameters];を宣言しなければならないので、私はファクトリメソッドを作ることにしました。私はそれを働きましたが、何らかの理由でそれはいくつかの状況でプログラムをクラッシュさせます。私のファクトリメソッドが意図した通りに動作していません

これは.Mファイルに私の工場コードです:

@implementation pixelSprite 

+ (id) spriteFromFrame:(NSString *)frame setScale:(BOOL)scale resetAnchor:(BOOL)reset { 
CCSprite *sprite = [CCSprite spriteWithSpriteFrameName:frame]; 
[sprite.texture setAliasTexParameters]; 
if (scale) {sprite.scale = 2;} 
if (reset) {sprite.anchorPoint = ccp(0, 0);} 
return sprite; 
} 
@end 

そして、この.hファイルから:

@interface pixelSprite : CCSprite {} 
+ (id)spriteFromFrame:(NSString*)frame setScale:(BOOL)scale resetAnchor:(BOOL)reset; 
@end 

私はこのようにそれをボタンスプライトを作り、それが完璧に動作します。

CCSprite *bg3 = [pixelSprite spriteFromFrame:@"bgMenu3.png" setScale:TRUE resetAnchor:FALSE]; 
    //bg3.anchorPoint = ccp(0.5, 0); 
    bg3.position = ccp(240, 210); 
    [self addChild:bg3 z:1]; 

私はスプライトの工場を使用していたものをの.mファイル内の.hファイルが含まれました。例えば、これはプログラムをクラッシュするいくつかの理由

CCSprite *spriteCampaign1 = [pixelSprite spriteFromFrame:@"buttonCampaign1.png" setScale:FALSE resetAnchor:FALSE]; 

答えて

1

spriteFrameCacheに、失敗したスプライトのエントリが含まれていることを確認します。そうでなければ、あなたの工場はゼロスプライトを返し、NSAssertで[self addChild:bg3 z:1]は失敗します。あなたの工場からの返品は悪いことではありませんが、それは期待できる動作です。防御的にプログラムする必要があります。

CCSprite *bg3 = [pixelSprite spriteFromFrame:@"bgMenu3.png" setScale:TRUE resetAnchor:FALSE]; 
if(bg3) { 
    //bg3.anchorPoint = ccp(0.5, 0); 
    bg3.position = ccp(240, 210); 
    [self addChild:bg3 z:1]; 
} else { 
    CCLOGERROR(@"whatever your flavor of logging is"); 
} 
+0

ありがとうございます。間違いは、スプライトシートの個々の画像とフレームを使用して、同じ方法をスプライトに使用しようとしたことです。本当にダミーの間違い。 – Liuhu

関連する問題