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;
}
}
残念ながらスプライトを削除できません。論理的には、親からスプライトを削除する必要があります。しかし、実際には動作しません。
これはうまくいくはずです。そのスプライトを保持していることを忘れないでください(プロパティは保持されます)。親から削除した後にスプライトを解放するには、self.sprite = nilを実行します。 – Ultrakorne
ありがとうございました..私はself.sprite = nilを行い、それは私のために働きます.. –
チャイルドとして追加されたCCNodesを使用する場合は、そのプロパティを宣言し、保持しない方が望ましいです。スプライトはその親によって保持されるので、実際にスプライトを親から取り除いた後に覚えておく必要はありません – Ultrakorne