0

我正在编写一个小游戏。为此,我需要一些墙。因此我使用了:

    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

4

1 回答 1

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 。

于 2015-04-03T13:18:05.643 回答