2011-12-14 25 views
0

我正在創建一個小遊戲,其目標是挖掘並銷燬鼠標。我爲它創建了一個單獨的鼠標類。無法從新的CCNode類刪除精靈

#import <Foundation/Foundation.h> 
#import "cocos2d.h" 
#import "HelloWorldLayer.h" 
@interface Mouse : CCNode <CCTargetedTouchDelegate> { 
    CCSprite *sprite; 
    HelloWorldLayer *HelloLayer; 
} 
-(id) initWithGame:(HelloWorldLayer *)aGame; 
-(void) runFloatAction; 
@property(nonatomic, retain) CCSprite *sprite; 
@property(nonatomic, retain) HelloWorldLayer *HelloLayer; 
@end 

我初始化這樣在.m文件:

-(id) initWithGame:(HelloWorldLayer *)aGame{ 
    if ((self = [super init])) { 
     self.sprite = [CCSprite spriteWithFile:@"mouse.png"]; 
     self.sprite.scale = 0.3f + CCRANDOM_0_1() * 0.5f; 
     self.sprite.position = ccp(CCRANDOM_0_1() * 480, CCRANDOM_0_1() * 320); 
     self.HelloLayer = aGame; 
     [aGame addChild:sprite]; 

     [[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self 
                 priority:1 
                swallowsTouches:YES]; 

     //[self runFloatAction]; 
    } 

    return (self); 
} 

我想在點擊刪除精靈。我在.m文件中使用此代碼: -

- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event 
{ 
    if ([self containsTouchLocation:touch]) { 
     [self.sprite removeFromParentAndCleanup:YES]; 
     return YES; 
    }else{ 
     return NO; 
    } 
} 

不幸的是,我無法刪除精靈。從邏輯上講,我們必須從父母中刪除精靈。但是,它並沒有真正的工作。

+0

應該工作。但請記住,你保留這個精靈(你的財產是保留)。你可以做self.sprite = nil,從其父節點中刪除後釋放精靈。 – Ultrakorne 2011-12-14 11:01:46

回答

0

我構建我的類的方式是將Mouse類作爲CCSprite的子類。如果您在主遊戲課程中處理觸摸事件,則只需移除鼠標即可。如果您還沒有這樣做,您還需要啓用觸摸事件。

我建議你做上面的事,把它放在你的遊戲類中。

[self setIsTouchEnabled:YES]; 
Mouse *myMouse = [Mouse spriteWithImage:@"Mouse.png"]; 
[myMouse setPosition:CGPointMake(160, 240)]; 
[self addChild:myMouse]; 

然後只處理遊戲類中的觸摸事件。