私は問題のあるcocos2dベースのiphoneアプリを持っています。ユーザーがゲームを一時停止し、再開ボタンを押すと、一部のCCスプライトが画面から消えます。 この動作はランダムで、パターンは続きません。私はこれが、ユーザーがゲームを再開したときにのみ起こることを知っています。スプライトが時刻に表示されない
ここにコードがありますが、何が間違っていますか? 私は最初にメモリ管理の問題かもしれないと思っていましたが、ユーザーがレジュームしたときにEXC_BAD_ACCESSを取得することはありません...スプライトはおそらくまだ存在しています。
スプライトはオブジェクト内のプロパティです。「myobject」と呼びます。 myObject.hで
私が持っている:
@interface myObject : CCNode{
CCSprite *_sprite1,*_sprite2;
// some other code
}
@property (nonatomic,retain) CCSprite *sprite1,*sprite2;
そしてmyObject.mファイル内:
@synthesize sprite1=_sprite1;
@synthesize sprite2=_sprite2;
+(id)create:(CCLayer*)scene{
myobject.sprite1 = [CCSprite spriteWithFile:spriteFile];
[scene addChild:myobject.sprite1];
// same for sprite2
}
-(void) move:(ccTime)dt{
//SOMECODE
self.sprite1.position=ccp(self.x,self.y); // same for sprite2
}
は、彼らはMyObjectにに呼び出される関数で動き回るます。メインのシーンで
は、ここでこれらのオブジェクトを作成し、周りに移動する方法です。myObject *myObject;
NSMutableArray *_myObjects;
@implementation HelloWorld
+(id) scene
{
CCScene *scene = [CCScene node];
HelloWorld *layer = [HelloWorld node];
[scene addChild:layer z:0 tag:33];
return scene;
}
-(id) init
{
if((self=[super init])) {
_myObjects = [[NSMutableArray alloc] init];
// some other code
}
}
-(void) addObject(){
myObject=[myObject create:self];
[_fallingObjects addObject:fallingObject];
}
-(void) nextFrame:(ccTime) dt{
for(myObject *theObject in _myObjects){
[theObject move:dt];
}
}
// And here is the function that does the pause/unpause, here it is:
- (void) pauseGame{
if(pauseStatus==0){
[[CCDirector sharedDirector] pause];
pauseStatus=1;
// some code to display menu etc... such as:
[self addChild:pauseMenu z:10];
}
else{
[self removeChild:pauseMenu cleanup:YES];
[self removeChild:scoreLabel cleanup:YES];
[self removeChild:highscoreLabel cleanup:YES];
[self removeChild:titleLabel cleanup:YES];
[self removeChild:pauseLayer cleanup:YES];
[[CCDirector sharedDirector] resume];
pauseStatus=0;
}
}
== EDIT ===
私はこの問題はまた、スプライトのために真であることを発見したそのI以下に示すような追加スプライトピエロとして、私のシーンに直接追加します。
CCSprite *clown;
@implementation HelloWorld
-(id) init
{
if((self=[super init])) {
// some code
clown = [[CCSprite spriteWithFile:@"clown.png"] retain];
[self addChild:clown z:2];
// some more code
}
}
@end
編集=== OF == END
Cocos2Dには仮想時間の経過を停止するために呼び出すことができるpause()メソッドがあります。あなたはすでにそれを呼んでいますか?乾杯。 –