私は次のプログラムを作成しました。これは次のことを行う必要があります。ユーザーが移動するスプライトに触れると、シーンから削除する必要があります。
しかし、コードを実行すると、次のことが起こります。最上位のスプライトに触れると、隣接するスプライトが消えます。どうすれば修正できますか?
これがコードです。
UPD:このコードを小さい* .pngファイルでテストしましたが、すべて正常に動作します。しかし、より大きな* .pngファイル(200x200ピクセルのようなsmth、iPhoneシミュレーター)では、バグがあります。オブジェクトは、touchEventで最も近い隣のオブジェクトを削除します。
意味
#import <Foundation/Foundation.h>
#import "cocos2d.h"
@interface GameplayLayer : CCLayer {
NSMutableArray *arrayOfSprites;
}
@end
#import "GameplayLayer.h"
@implementation GameplayLayer
-(id)init
{
self = [super init];
self.isTouchEnabled=YES;
arrayOfSprites=[[NSMutableArray alloc] init];
if (self != nil)
{
int j=100;
for (int i=0; i<=2; i++) {
[arrayOfSprites addObject:[CCSprite spriteWithFile:@"sv_anim_1-hd.png"]];
[[arrayOfSprites objectAtIndex:i] setPosition:CGPointMake(j,j)];
[self addChild:[arrayOfSprites objectAtIndex:i] z:0 tag:i];
j+=100;
}
[self startRunning];
}
return self;
}
-(void)startRunning
{
CGSize screenSize=[[CCDirector sharedDirector] winSize];
for ( CCSprite * currentSprite in arrayOfSprites)
{
[currentSprite runAction:[CCMoveTo actionWithDuration:10 position:CGPointMake(screenSize.height,screenSize.width/2)]];
}
}
-(void) registerWithTouchDispatcher
{
[[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:0
swallowsTouches:YES];
}
-(BOOL) ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event {
return YES;
}
-(void) ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event {
CGPoint locationOfTouch=[self convertTouchToNodeSpace: touch];
for (CCSprite *currentSprite in arrayOfSprites)
{
if (CGRectContainsPoint(currentSprite.boundingBox, locationOfTouch))
{
NSLog(@"Sprite was touched");
[self removeChild:currentSprite cleanup:YES];
}
}
}
@end