2

我使用以下代码在 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 似乎翻转了。图像位于底部,但只有当我触摸屏幕顶部时,它才会说发生了触摸。

4

2 回答 2

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如果只有该节点,您可以只枚举。

于 2013-10-03T12:47:02.653 回答
2

尝试这个。

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

spriteKit链接的好例子

于 2013-10-03T13:06:07.353 回答