我正在编写一个小游戏。为此,我需要一些墙。因此我用过:
Wall[w] = [[SKShapeNode alloc] init];
Wall[w].path = WallPos[w];
Wall[w].lineWidth = 4;
Wall[w].strokeColor = [UIColor whiteColor];
Wall[w].zPosition = 3;
[self addChild: Wall[w]];
Wall是一个SKShapeNodes数组,在@interface中设置,所以我可以在每个方法中使用它。 WallPos包含CGMutablePathRefs。 在TouchesBegan和TouchesMoved中,我正在调用一种方法,该方法应该检查你是否触及了其中一面墙。 我还有一些是矩形的SKShapeNodes,为了检查它们是否被触摸,我使用了
if ([SomeShape containsPoint: Position] {
//Do some stuff
}
但是有一条线它不起作用。有时候我正在接触线路,没有任何反应。然后我看到了这个:Detecting Touch on SKShapeNode that is a Line我试图这样做:
for (int i = 0; i < NrWalls; i++) {
if (CGRectContainsPoint(Wall[i].frame, Position)) {
[self GameOver];
}
}
但现在我触摸的每一个点都为我设置了“游戏结束”!!
有没有人有想法,我怎么能检查线是否被触摸?
感谢您的帮助!
DXXL
答案 0 :(得分:1)
不确定为什么要将SKShapeNodes用于墙和矩形。要回答您的问题,您可以将物理主体附加到形状节点,并使用联系方法检查可能的联系人。但是,由于锚点和获得所需的对齐,将物理主体分配给形状节点可能是一项棘手的任务。
看到你真的只是为你的墙绘制矩形,我建议你使用带有物理体的SKSpriteNode。像这样:
SKSpriteNode *myNode = [SKSpriteNode spriteNodeWithColor:[SKColor redColor] size:CGSizeMake(5, 100)];
myNode.position = CGPointMake(100, 100);
myNode.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:myNode.size];
myNode.physicsBody.dynamic = NO;
myNode.physicsBody.categoryBitMask = CategoryWall;
[self addObject:myNode];
如果您需要,可以阅读SKPhysicsBody here。