我使用以下代码在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似乎都被翻转了。图像放在底部,但只有当我触摸屏幕顶部时才会说触摸发生。
答案 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
的好例子