Sprite kit 触摸精灵时执行操作

Sprite kit 触摸精灵时执行操作,sprite-kit,skspritenode,Sprite Kit,Skspritenode,如何在触摸精灵时执行操作我当前使用的是node方法,它会检查精灵的名称,但是否有任何方法可以使每次触摸精灵时,该方法更加准确和响应 简而言之:当用户触摸精灵时,我如何执行操作?我不确定您所说的精灵名称是什么意思,但我认为下面的代码示例是检查触摸了哪个SKSpriteNode的最佳方法 #import "MyScene.h" @implementation MyScene { SKSpriteNode *frank; SKSpriteNode *sally; } -(id)in

如何在触摸精灵时执行操作我当前使用的是node方法,它会检查精灵的名称,但是否有任何方法可以使每次触摸精灵时,该方法更加准确和响应


简而言之:当用户触摸精灵时,我如何执行操作?

我不确定您所说的精灵名称是什么意思,但我认为下面的代码示例是检查触摸了哪个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);

假设我想在精灵处于某个y值并且被触摸时发生一个动作,我该怎么做?@user3385401-嘿!你是不是想偷偷摸摸地把一个2:1的答案带进来?@user3385401-这是个玩笑:)我已经更新了关于你第二个问题的答案。哈哈,直到看到更新的答案,我才意识到这一点。