0

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]]; 
}
4

1 に答える 1