私はゲームの準備が整いましたが、今はリファクタリングを試みています。私は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;
}
spiderSpriteが初期化され、ビュー階層に追加されたコードを追加してください。 – LearnCocos2D
最後にスパイダーの初期コードを追加しました。 –