Выполнять действие при касании Спрайта

Как я могу выполнить действие при прикосновении к спрайту? В настоящее время я использую метод узла, и он проверяет имя спрайта, но есть ли способ сделать его более точным и отзывчивым при каждом прикосновении к спрайту.

Вкратце: как я могу выполнить действие, когда пользователь касается спрайта?


person nmwood    schedule 27.04.2014    source источник


Ответы (1)


Я не уверен, что вы имеете в виду под названием спрайта, но я думаю, что приведенный ниже пример кода — лучший способ проверить, какой SKSpriteNode был затронут.

#import "MyScene.h"

@implementation MyScene
{
    SKSpriteNode *frank;
    SKSpriteNode *sally;
}

-(id)initWithSize:(CGSize)size
{
    if (self = [super initWithSize:size])
    {
        frank = [SKSpriteNode spriteNodeWithColor:[SKColor blueColor] size:CGSizeMake(50, 50)];
        frank.position = CGPointMake(100, 100);
        [self addChild:frank];

        sally = [SKSpriteNode spriteNodeWithColor:[SKColor redColor] size:CGSizeMake(50, 50)];
        sally.position = CGPointMake(300, 100);
        [self addChild:sally];
    }
    return self;
}

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    CGPoint touchLocation = [touch locationInNode:self.scene];

    if (CGRectContainsPoint(frank.frame, touchLocation))
        NSLog(@"Frank");

if (CGRectContainsPoint(sally.frame, touchLocation))
        NSLog(@"Sally");
}

-(void)update:(CFTimeInterval)currentTime
{
    //
}

@end

ОБНОВЛЕНО для дополнительного вопроса

Вы можете проверить положение узла следующим образом:

if ((CGRectContainsPoint(sally.frame, touchLocation)) & (sally.position.y > 50))
    NSLog(@"Sally's y position: %f",sally.position.y);
person sangony    schedule 27.04.2014
comment
Скажем, я хотел, чтобы действие происходило, когда спрайт имеет определенное значение y и его касаются, как мне это сделать? - person nmwood; 28.04.2014
comment
@ user3385401 - Привет! Вы пытаетесь прокрасться 2 на 1 в? - person sangony; 28.04.2014
comment
@user3385401 user3385401 - Это была шутка :) Я обновил свой ответ относительно вашего второго вопроса. - person sangony; 28.04.2014
comment
Лол, я не понимал этого, пока не увидел обновленный ответ. - person nmwood; 28.04.2014