Я создаю класс с именем "Плитка", который является квадратом, и переданный блок будет вызываться при касании.
-(id) initWithRect: (CGRect) r color: (ccColor4B) c block: (void (^) (void)) blk {
if ((self = [super init])) {
rect = r;
color = c;
block = blk;
tile = [CCLayerColor layerWithColor:color width:rect.size.width height:rect.size.height];
tile.position = ccp(rect.origin.x, rect.origin.y);
[self addChild: tile];
self.isTouchEnabled = YES;
}
return self;
}
// прямоугольник - это квадрат, я использую CCLayerColor для представления квадрата.
-(BOOL) ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event {
CGPoint touchLocation = [Helper locationFromTouch: touch];
if (CGRectContainsPoint(rect, touchLocation)) {
block();
[tile setColor:ccGRAY];
return YES;
}
else {
return NO;
}
}
// при касании просто вызовите блок.
затем я делаю пару плиток следующим образом:
Tile* aTile = [Tile tileWithMidPos:ccp(512, 500) width:300 height:200 color:ccc4(250, 250, 250, 250) block:^{
[Helper playEffectButtonClicked];
}];
но все плитки фактически выполняют блок, который передается последней плиткойв чем здесь проблема?(каждая плитка является объектом, поэтому они должны вызывать свой собственный блок)