これは、以下のenemyShootメソッドで発砲する前に、弾丸を割り当て/初期化するenemyShipクラスのinitメソッドです。
-(id) init
{
// always call "super" init
// Apple recommends to re-assign "self" with the "super's" return value
if( (self=[super init]) ) {
CGSize windowSize =[[CCDirector sharedDirector] winSize];
[self initWithFile:@"Spaceship_tut.png"];
[self setPosition:ccp(windowSize.width/2, windowSize.height - windowSize.height/9)];
[self moveAround];
self.bullet = [[Bullets alloc] init];
self.bullet1 = [[Bullets alloc] init];
self.bullet2 = [[Bullets alloc] init];
self.bullet3 = [[Bullets alloc] init];
self.bullet4 = [[Bullets alloc] init];
self.bullet5 = [[Bullets alloc] init];
myBullets = [[NSArray alloc] initWithObjects:bullet1,bullet2,bullet3,bullet4,bullet5, nil];
index = 0;
}
return self;
}
-(void)enemyShoot:(CCLayer*)theScene withThePoint:(CGPoint)whereTo
{
NSArray *myBullets = [[NSArray alloc] initWithObjects:bullet,bullet1,bullet2,bullet3,bullet4,bullet5, nil];
bullet = [[Bullets alloc ] init];
self.bullet = [myBullets objectAtIndex:index];
self.bullet.position = self.position;
[theScene addChild:bullet];
id action = [CCMoveTo actionWithDuration:2.0 position:ccp(whereTo.x,whereTo.y)];
[self.bullet runAction:action];
index++;
if (index == 4) {
index = 0;
}
}
これは敵艦クラスにあります。船は弾丸を発射することができ、これがそれを可能にする方法です。以下は、bullet.m ファイルの箇条書きの init メソッドです。
-(id) init
{
// always call "super" init
// Apple recommends to re-assign "self" with the "super's" return value
if( (self=[super init]) ) {
self = [CCSprite spriteWithFile:@"enemyBullet2.png"];
}
return self;
}
問題は、なぜこのエラーが発生したと思いますか
"Assertion failure in -[Level2 addChild:z:tag:], /Users/dulybon1/Documents/DEVELOPER/lesson1/lesson1/libs/cocos2d/CCNode.m:355"
これは、敵が数発発射した後、オブジェクトがメモリに存在しないことを意味すると思います。この関数がゲーム レイヤーでどのように呼び出されるかを次に示します。この関数は、次を使用して init メソッドで継続的に呼び出されます。
[セルフスケジュール:@selector(continuousShooting:)];
-(void)continuousShooting:(ccTime)dt
{
[enemyShip enemyShoot:self withThePoint:ccp(myShip.position.x,myShip.position.y -200)];
}