2015-04-03 3 views
0

Я программирую небольшую игру. Для этого мне нужны стены. Therefor я использовал:Проверьте, есть ли SKShapeNode, который содержит строку

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]]; 

Стена является массив 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]; 
     } 
    } 

Но теперь каждый пункт я прикасаюсь устанавливает точку «Game Over» для меня !!

У кого-нибудь есть идея, как я могу проверить, не затронута ли линия?

Благодарим за помощь!

DXXL

ответ

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.

 Смежные вопросы

  • Нет связанных вопросов^_^