Objective C を使い始めたばかりですが、設計が間違っているか、実装が間違っているか、あるいはその両方か、わかりません。
関連情報を以下に示しましたが、私の期待は次のとおりです。
PlayerBullet クラスを作成して、スプライト ファイル、速度、発砲時の音など、クラス ファイルで事前に定義されたデータを割り当てることができるようにします。
弾丸が作られるたびに playerShoot 関数でそのデータを設定するよりも良いと思います。ただし、insertObject:atIndex:] オブジェクトを nil にすることはできないというエラーが表示されます。
//PlayerBullet.h
#import "cocos2d.h"
@interface PlayerBullet: CCSprite{
CCSprite *projectile;
}
property (nonatomic, assign) CCSprite *projectile;
@end
//PlayerBullet.m
#import "PlayerBullet.h"
@implementation PlayerBullet
-(id)init{
projectile = [CCSprite spriteWithFile:@"projectile.png"];
return self;
}
@end
//HelloWorldLayer.h
...
@interface HellowWorldLayer: CCLayerColor{
PlayerBullet *playerBullet;
}
...
//HelloWorldLayer.m
...
-(void)playerShoot:(ccTime)dt{
CGSize winSize = [[CCDirector sharedDirector] winSize];
playerBullet = [[PlayerBullet alloc] init];
playerBullet.projectile.tag = 2;
[_projectiles addObject:playerBullet.projectile];
playerBullet.projectile.position = ccp(player.position.x,player.position.y);
[self addChild:playerBullet.projectile];
[playerBullet.projectile runAction:
[CCSequence actions:
[CCMoveTo actionWithDuration:1.5 position:ccp(player.position.x,winSize.height)],
[CCCallBlockN actionWithBlock:^(CCNode *node){
[node removeFromParentAndCleanup:YES];
[_projectiles removeObject:node];
}],
nil]];
}