2015-06-08 6 views
0

Итак, в MyScene.m Я создаю объекты своего Воздушного шара и поставлю их на сцену.Как вызвать метод объекта в касанияхБеан при касании?

for (int i = 0; i < 4; i++) { 

    Balloon *balloonObject = [[Balloon alloc] init]; 
    balloonObject.position = CGPointMake(50 + (75 * i), self.size.height*.5); 
    [_balloonsArray addObject:balloonObject]; 
} 

while (_balloonsArray.count > 0) { 
    [self addChild:[_balloonsArray objectAtIndex:0]]; 
    [_balloonsArray removeObjectAtIndex:0]; 
} 

Это дает мне 4 воздушных шара на моем экране. В файле Balloon.h у меня есть метод, называемый -(void)shrink, который я хочу получить на удаленном объекте balloonObject внутри метода -(void)touchesBegan. Я пробовал этот код ниже, но он дает мне ошибку NSInvalidArgumentException', reason: '-[SKSpriteNode shrink]: unrecognized selector sent to instance 0x17010c210'.

for (UITouch *touch in touches) { 
     CGPoint location = [touch locationInNode:self]; 
     Balloon *node = (Balloon *)[self nodeAtPoint:location]; 

     if ([node.name isEqualToString:@"balloon"]) { 

      [node shrink]; 
     } 
} 

Balloon.h

@interface Balloon : SKSpriteNode 

-(void)shrink; 

@end 

Balloon.m

@implementation Balloon 
{ 
    SKSpriteNode *_balloon; 
} 

-(id)init{ 

    self = [super init]; 
    if (self){ 
     _balloon = [SKSpriteNode spriteNodeWithImageNamed:@"balloonPicture"]; 
     _balloon.name = @"balloon"; 
     _balloon.position = CGPointMake(0, 0); 

     [self addChild:_balloon]; 
    } 

    return self; 
} 

-(void)shrink{ 

    // does something 
} 
+1

Не могли бы вы опубликовать ваши файлы '' Balloon.h' и Balloon.m'? –

+1

Так же, как вы указываете название своих воздушных шаров на воздушный шар '@" ' –

+0

Другим способом приближения к вашей цели было бы однозначно назвать ваши объекты шара, добавить их в массив (как и вы), перечислить массив в найти воздушный шар, касающийся по имени, а затем запустить метод усадки. – sangony

ответ

3

Проблема в вашем баллонной инициализации. Вместо использования класса Balloon вы создаете дочерний SKSpriteNode и устанавливаете имя на воздушный шар. Вот почему вы получаете SKSpriteNode, а не воздушный шар.

Вы могли бы сделать что-то подобное вместо этого.

-(id)init{ 

    self = [super init]; 
    if (self){ 

     self.texture = [SKTexture textureWithImageNamed:@"balloonPicture"]; 
     self.size = self.texture.size; 
     self.name = @"balloon"; 
     self.position = CGPointMake(0, 0); 
    } 

    return self; 
} 

В сцене, где вы создаете воздушный шар

Ballon *balloon = [[Balloon alloc]init]; 
[self addChild:balloon];