如何检测一个 SKSpriteNode 何时命中另一个 SKSpriteNode



我正在尝试制作一个游戏,您可以倾斜手机并尝试将球保持在边界内。我似乎不知道如何让球不穿过边界。我有倾斜来移动球工作,但它只是穿过我所有的边界,我似乎无法弄清楚当球与边界接触时如何让球停止。这是我的代码:

 override func didMove(to view: SKView) {
        let border = SKPhysicsBody(edgeLoopFrom: self.frame)
        self.physicsBody = border
        boundary = (self.childNode(withName: "boundry") as! SKSpriteNode) //the boundary is spelled wrong
        airplane = SKSpriteNode(imageNamed: "ball image")
        airplane.physicsBody = SKPhysicsBody(circleOfRadius: 10)
        airplane.position = CGPoint(x: -211.163, y: 367.3)
        airplane.size =  CGSize(width: 50, height: 50)
        airplane.physicsBody?.isDynamic = true
        airplane.physicsBody?.affectedByGravity = false
        airplane.physicsBody?.allowsRotation = true
        airplane.physicsBody?.pinned = false
        self.addChild(airplane)
        if motionManager.isAccelerometerAvailable {
            // 2
            motionManager.accelerometerUpdateInterval = 0.01
            motionManager.startAccelerometerUpdates(to: .main) {
                (data, error) in
                guard let data = data, error == nil else {
                    return
                }
                // 3
                let currentX = self.airplane.position.x
                self.destX = currentX + CGFloat(data.acceleration.x * 500)
                let currentY = self.airplane.position.y
                self.destY = currentY + CGFloat(data.acceleration.y * 500)
            }
        }
    }
    override func update(_ currentTime: TimeInterval) {
        let action = SKAction.moveTo(x: destX, duration: 1)
        let action2 = SKAction.moveTo(y: destY, duration: 1)
        airplane.run(action)
        airplane.run(action2)
    }

在SpriteKit中,除非你给它们一组匹配的collisionBitMask,否则事情不会发生冲突。 即border.collisionBitMaskairplane.collisionBitMask需要至少有一个共同的非零位。 尝试将两者设置为 1 开始。

另一件事是,您可能需要为飞机添加距离约束,以便在速度过高时无法从边界逃脱。

最新更新