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 では、壁の 1 つに触れたかどうかを確認するメソッドを呼び出しています。RectanglesであるSKShapeNodesもいくつかあり、それらが触れられているかどうかを確認するために使用しました

if ([SomeShape containsPoint: Position] {
//Do some stuff
}

しかし、行では機能しません。回線に触れても何も起こらないことがあります。それから私はこれを見ました:線であるSKShapeNodeでタッチを検出し、その方法でそれをやろうとしました:

    for (int i = 0; i < NrWalls; i++) {
       if (CGRectContainsPoint(Wall[i].frame, Position)) {
           [self GameOver];
       }
    }

しかし今では、私が触れるたびに「ゲームオーバー」が設定されます!!

アイデアはありますか? ラインが触れているかどうかを確認するにはどうすればよいですか?

ご協力いただきありがとうございます!

DXL

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 に答える