2011-12-07 8 views
1

私はゲームの準備が整いましたが、今はリファクタリングを試みています。私はCCNodeからSpiderクラスを派生させ、ターゲットの委譲メソッドCCTargetedTouchDelegateを使用しました。タッチクモでコードリファクタリングの問題

@interface Spider : CCNode<CCTargetedTouchDelegate> { 
    CCSprite* spiderSprite; 
    NSString * spiderKilled; 
    int killed; 
    AppDelegate *del; 
} 

+(id) spiderWithParentNode:(CCNode*)parentNode; 
-(id) initWithParentNode:(CCNode*)parentNode; 

@end 

殺され、ここにコードを行くべきである:

-(BOOL) ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event 
{ 
    CGPoint tch = [touch locationInView: [touch view]]; 
    CGPoint touchLocation = [[CCDirector sharedDirector] convertToGL:tch]; 

    // Check if this touch is on the Spider's sprite. 
    BOOL isTouchHandled = CGRectContainsPoint([spiderSprite boundingBox], touchLocation); 

    if (isTouchHandled) 
    { 
     j = j + 1; 
     killed ++; 
     [del setKilledScore:j]; 
     [self removeChild:spiderSprite cleanup:YES]; 
    } 

    return isTouchHandled; 
} 

私はGameScene層で10匹のクモ使用して追加してい: -

for(int i=0; i <10 ;i++){ 
     [Spider spiderWithParentNode:self]; 
    } 

をしかし、残念ながら、私はないですスパイダーを削除してこの行にEXC_BAD_ACCESSエラーを出すことができます:[self removeChild:spiderSprite cleanup:YES];

このエラーを克服するのを手伝ってください。

おかげ


アップデート - スパイダー初期化コード //静的自動解放初期化子、模倣cocos2dのメモリ割り当て方式。 +(id)spiderWithParentNode :(CCNode *)parentNode { 戻り値[[[self alloc] initWithParentNode:parentNode] autorelease];手動CCTouchDispatcherリストにクラスを追加する場合は、あなたがそれを使用して終わった後 }

-(id) initWithParentNode:(CCNode*)parentNode 
{ 
    if ((self = [super init])) 
    { 
     [parentNode addChild:self]; 
     del = [[UIApplication sharedApplication] delegate]; 
     CGSize screenSize = [[CCDirector sharedDirector] winSize]; 

     spiderSprite = [CCSprite spriteWithFile:@"spider.png"]; 
     spiderSprite.position = CGPointMake(CCRANDOM_0_1() * screenSize.width, CCRANDOM_0_1() * screenSize.height); 
     [self addChild:spiderSprite]; 

     // Manually add this class as receiver of targeted touch events. 
     [[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:-1 swallowsTouches:YES]; 
    } 

    return self; 
} 
+0

spiderSpriteが初期化され、ビュー階層に追加されたコードを追加してください。 – LearnCocos2D

+0

最後にスパイダーの初期コードを追加しました。 –

答えて

0

、あなたはそこからそれを削除する必要があります。

関連する問題