2015-11-14 2 views
0

Я создал два объекта, стены и игрока, которые могут столкнуться. Если они сталкиваются, игрок не должен передвигаться по стене или над ней. Если я устанавливаю massWall >> massPlayer, игрок может иногда перемещаться по стене. Если я не создаю массы, игрок и стена будут двигаться в направлении. Я хочу добиться, чтобы стена стояла неподвижно, и игрок не мог перелезть через стену. Мой код:Swift/SpriteKit обнаружение столкновений

func addWall(xPos: CGFloat, yPos: CGFloat){ 
    let wallNode = SKSpriteNode(imageNamed: "wall") 

    wallNode.physicsBody = SKPhysicsBody(circleOfRadius: width/2) 
    wallNode.physicsBody!.affectedByGravity = false 
    wallNode.physicsBody!.categoryBitMask = ColliderType.Wall.rawValue 
    wallNode.physicsBody!.contactTestBitMask = ColliderType.Player.rawValue 
    wallNode.physicsBody!.collisionBitMask = ColliderType.Player.rawValue 
    wallNode.physicsBody!.mass = 1000000 

    let wall = Wall(node: wallNode) 
    Walls.append(wall) 
    wallNode.position.x = xPos 
    wallNode.position.y = yPos 
    wallNode.size = CGSize(width: width, height: width) 
    addChild(wallNode) 
} 

func addPlayer(xPos: CGFloat, yPos: CGFloat){ 
    playerNode = SKSpriteNode(imageNamed: "player") 

    playerNode.physicsBody = SKPhysicsBody(circleOfRadius: width/2) 
    playerNode.physicsBody!.affectedByGravity = false 
    playerNode.physicsBody!.categoryBitMask = ColliderType.Player.rawValue 
    playerNode.physicsBody!.contactTestBitMask = ColliderType.Wall.rawValue 
    playerNode.physicsBody!.collisionBitMask = ColliderType.Wall.rawValue 
    playerNode.physicsBody!.mass = 1 


    let player = Player(node: playerNode, healthPoints: 100, attack: 10) 
    playerNode.position.x = xPos 
    playerNode.position.y = yPos 
    playerNode.size = CGSize(width: width, height: width) 
    addChild(playerNode) 
} 

В func didBeginContact(){} у меня ничего не коды в этом, потому что я не сейчас, что с ним делать. Я не могу отменить движение, потому что я не отслеживаю последний ход.

ответ

1

Есть две вещи, которые необходимо изменить. Первый - решить игрока, проходящего через стену. Это фиксируется, обеспечивая точное обнаружение столкновений на playerNode как таковой (просто поставить это с остальной частью конфигурации physicsBody):

playerNode.physicsBody!.usesPreciseCollisionDetection = true 

Далее вам нужно сделать ваши стены не имеют динамическую физику, это остановит его от реагирования, когда ваш playerNode сталкивается с этим. Вам не нужно устанавливать mass из wallNode, вам это не понадобится. Поэтому следует добавить что-то вроде этого (просто поставьте это на оставшуюся часть конфигурации physicsBody):

wallNode.physicsBody!.dynamic = false 

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

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