Spritekit和Touch事件(坐标似乎翻转)

时间:2013-10-03 12:27:27

标签: objective-c cocoa-touch ios7 sprite-kit

我使用以下代码在SKScene上添加了一个图像 -

char1 = [[SKSpriteNode alloc] initWithImageNamed:@"CH_designb_nerd.png"];
    char1.position = CGPointMake(225.0, 65.0);
    char1.anchorPoint = CGPointMake(0, 0);
    [char1 setScale:0.35];
    [self addChild:char1];

然后我试图在图像上创建触摸事件,但图像的CGRect似乎完全翻转在屏幕的另一侧。我使用了以下代码

(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [[event allTouches] anyObject];
    CGPoint location = [touch locationInView:self.view];
    if (CGRectContainsPoint(char1.frame, location)) {
        NSLog(@"yaaa!!");

    }
    else{
        NSLog(@"%.2f",location.x);
        NSLog(@"%.2f",char1.position.x);

    }

}

我完全迷失了,因为图像放置得很完美,但坐标或CGRect似乎都被翻转了。图像放在底部,但只有当我触摸屏幕顶部时才会说触摸发生。

2 个答案:

答案 0 :(得分:2)

我想这是因为获得了错误的点击位置。我会考虑使用SKNode等效命中进行命中测试。像这样:

UITouch *touch = [touches anyObject];
CGPoint location = [touch locationInNode:self];
SKSpriteNode *char1 = (SKSpriteNode *)[self childNodeWithName:@"char1Name"];
if ([char1 containsPoint:location])
{
    ...
}

这里可能存在一些语法错误,从内存中键入但你得到了要点。注意:您需要为name设置char1属性才能执行查找,或者如果只有该节点,则可以枚举self.children

答案 1 :(得分:2)

试试这个。

UITouch * touch = [touches anyObject];
CGPoint location = [touch locationInNode:self];

spriteKit Link

的好例子