SKSpriteNode 在 Swift SpriteKit 中以多路径和高速通过 SKShapeNode

SKSpriteNode passing through SKShapeNode with multiple paths and high speed in Swift SpriteKit

提问人:lando2319 提问时间:9/24/2023 更新时间:9/24/2023 访问量:31

问:

我在 Spritekit 中有一个游戏,汽车是 ,线是 .SKSpriteNodeSKShapeNode

从第一个 gif 中可以看出,当我在顶部画一个 X 让汽车低速下落时,它工作正常,但随后画一个 X(第二个 gif)让汽车速度更快,它会导致汽车通过线条并表现不正常。

我的理解是,这是没有达到碰撞阈值的结果,汽车的行驶速度超过了系统捕捉它的能力。

我在这里有什么选择,我尝试添加,但这没有帮助。调整 carNode 的速度或将视图设置为 90 也没有。usesPreciseCollisionDetectionpreferredFramesPerSecond

当我的节点快速运行时,我需要添加什么才能获得适当的碰撞?

enter image description here

enter image description here

var carNode: SKSpriteNode!
var lineNode: SKShapeNode?


 override func didMove(to view: SKView) {
    ...
    carNode = SKSpriteNode(texture: carTexture, size: carSize)
    carNode.physicsBody = SKPhysicsBody(rectangleOf: carNode.size)
    carNode.physicsBody?.categoryBitMask = 1
    carNode.physicsBody?.collisionBitMask = 2
    carNode.physicsBody?.contactTestBitMask = 2

    carNode.physicsBody?.angularDamping = 0.5
    ...    
    addChild(carNode)
    ...
}

...

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    ...
        let newLine = SKShapeNode() 
        ...
        addChild(newLine)
        lineNode = newLine

        updateLine(to: touchLocation!)
}
...


func updateLine(to position: CGPoint) {
        let physicsBody = SKPhysicsBody(edgeChainFrom: line.path!)
        physicsBody.categoryBitMask = 2
        physicsBody.collisionBitMask = 1
        physicsBody.contactTestBitMask = 2

        line.physicsBody = physicsBody
   ...
}
iOS Swift Sprite-kit skspritenode skshapenode

评论

0赞 lando2319 9/26/2023
gif 中显示的这些“X”是通过触摸一根手指,然后触摸第二根手指制成的。我无法通过在屏幕上拖动手指来复制这种效果,我怀疑当我使用双指触摸方法时,它没有以相同的方式映射点,这导致它无法有效地捕获下降的呼叫。我只是禁用了多点触控,游戏的目的是让玩家无论如何都画线

答: 暂无答案