在我的SKScene的TouchesBegan方法中,我正在检查用户是否选择了一个节点:
UITouch *touch = [[event allTouches] anyObject];
CGPoint location = [touch locationInNode:self];
SKNode *node = [self nodeAtPoint:location];
NSLog(@"node.name: %@",node.name);
if ([node.name isEqualToString:@"1"]){
bgColor = 1;
}
else if ([node.name isEqualToString:@"2"]){
bgColor = 2;
}
else if ([node.name isEqualToString:@"3"]){
bgColor = 3;
}
else if ([node.name isEqualToString:@"4"]){
bgColor = 4;
}
else if ([node.name isEqualToString:@"5"]){
bgColor = 5;
}
else if ([node.name isEqualToString:@"6"]){
bgColor = 6;
}
我的节点都是按如下方法初始化的:
SKShapeNode *bg = [SKShapeNode node];
[bg setPath:CGPathCreateWithRoundedRect(CGRectMake(self.size.width-50*2, 55, 50, 50), 6, 6, nil)];
bg.fillColor = [SKColor orangeColor];
bg.glowWidth = 0;
bg.name = @"6";
return bg;
当然,除了名称和颜色属性之外,这些方法都是相似的。 节点分为两行,一个在y 120处,另一个在y 55处,X是不同的,但是当用户单击行120或55中的任何节点时,记录的节点名称是最多来自节点的节点对。 为什么会这样?我做错了什么?
答案 0 :(得分:1)
我可以重新创建你的问题并找到解决方案:
不要通过在SKShapeNode
中设置起点和终点来定位CGRectMake()
。相反,只需使用postion
的常规SKShapeNode
属性即可。否则,节点似乎彼此重叠,尽管形状处于不同的坐标。
SKShapeNode *bg = [SKShapeNode node];
[bg setPath:CGPathCreateWithRoundedRect(CGRectMake(0, 0, 50, 50), 6, 6, nil)];
bg.position = CGPointMake(self.size.width-50*2, 55);
bg.fillColor = [SKColor orangeColor];
bg.glowWidth = 0;
bg.name = @"6";
return bg;