私はiPhoneゲームの初期の構築段階にあり、スプライトシートを使用してランダムな人物を作成しています。各人物には、髪の毛や衣類などのサブスプライトがあります。
CCSpriteBatchNodeを使用してスプライト画像をスプライトシートに保存しています。現在、初期設定テストを行っています。画面をタップして、新しいランダムな人のセットを生成します。奇妙なことに、一度タップすると古い人が削除されて新しい人に置き換えられますが、2回目は、「CCSpriteBatchNodeにスプライトが含まれていません。削除できません」というエラーでクラッシュします。これで、スプライトがバッチノードに追加されたと確信しています。Person.mコンストラクターに次の行があります。
[spriteSheet addChild:person];
ccTouchesEndedのテストコードには、次のコードがあります。
//updated with changes suggested by Mazyod and Jer
for(int i=6; i>=0; i--){
Person *per = [_people objectAtIndex:i];
[_people fastRemoveObjectAtIndex:i];
[_spritesheet removeChild:per cleanup:YES];
per = nil;
}
for(int i = 0; i < 7; i++){
Person *per = nil;
per = [Citizen personFromCountry:_country1 WithSpriteSheet:_spritesheet];
per.position = ccp(100 + (50 * i),160);
[_people addObject:per];
[_spritesheet addChild:per];
}
誰かが私が欠けているものを提案できますか?cocos2dのスプライトシートについてたくさん読んだことがありますが、個々のスプライトを削除するのは難しいことを理解しているので、ここに追加する必要のある重要な行がいくつかあると確信しています。ご協力いただきありがとうございます!
編集: 私はエラーをグーグルで検索し、このスレッドを見つけました:http: //www.cocos2d-iphone.org/forum/topic/17170これは、Cocos2dがスプライトをスプライトシートに追加していないと考えていることを確認しているようです-しかし、私はスプライトが最初は正しく追加され、2回目は正しく追加されないという事実によって証明されています。
1つの解決策は、スプライトをまったく削除せずに、スプライトを非表示にして、再利用する必要があるときに新しい特性で再描画することです。それがよりきれいに見えるので、私はむしろ本当の解決策が何であるかを知りたいです。