SpriteKit - 碰撞检测不起作用

时间:2017-02-07 20:25:20

标签: ios iphone swift sprite-kit game-physics

我遇到了碰撞问题。

根据tilemap添加physicbody:

=INDEX(SAQTY!H:H, MATCH(A2&"GRA", SAQTY!C:C&SAQTY!F:F, 0))

让子弹在点击action2按钮时产生:

 guard let tilemap = childNode(withName: "LevelGround") as? SKTileMapNode else { return }

    let tileSize = tilemap.tileSize
    let halfWidth = CGFloat(tilemap.numberOfColumns) / 2.0 * tileSize.width
    let halfHeight = CGFloat(tilemap.numberOfRows) / 2.0 * tileSize.height
    for row in 0..<tilemap.numberOfRows {
        for col in 0..<tilemap.numberOfColumns {
            if tilemap.tileDefinition(atColumn: col, row: row) != nil {
                let x = CGFloat(col) * tileSize.width - halfWidth
                let y = CGFloat(row) * tileSize.height - halfHeight
                let rect = CGRect(x: 0, y: 0, width: tileSize.width, height: tileSize.height)
                let tileNode = SKShapeNode(rect: rect)
                tileNode.position = CGPoint(x: x, y: y)
                tileNode.physicsBody = SKPhysicsBody(rectangleOf: tileSize, center: CGPoint(x: tileSize.width / 2.0, y: tileSize.height / 2.0))
                tileNode.physicsBody?.isDynamic = false
                tileNode.physicsBody?.affectedByGravity = false
                tileNode.physicsBody?.collisionBitMask = Physics().player | Physics().bullet
                tileNode.physicsBody?.categoryBitMask = Physics().ground
                tileNode.physicsBody?.contactTestBitMask = Physics().ground | Physics().player
                tileNode.physicsBody?.friction = 0.1
                tileNode.physicsBody?.restitution = 0
                tileNode.strokeColor = .white
                tileNode.name = "Ground"
                self.world.addChild(tileNode)
            }
        }
    }

子弹与敌人发生碰撞,敌人与玩家发生碰撞,玩家与地面发生碰撞 - 除了子弹与地面之间的碰撞外,一切正常。

提前感谢您的帮助

帕斯卡

0 个答案:

没有答案