如何检查两个Sprite节点的纹理是否相交

问题描述 投票:0回答:1

我正在创建一个简单的游戏(类似于Google Chrome T-Rex游戏),用户必须跳过枪管。我遇到的问题是用户正在丢失,因为两个节点的帧相交。但是,我使用的纹理不会占用整个框架,因此它看起来像个错误。有什么方法可以检查纹理本身而不是框架发生碰撞吗?

enter image description here

这是我用来创建角色节点的代码

    private lazy var avatarNode: SKSpriteNode = {
        let node = SKSpriteNode(imageNamed: "fox")
        node.name = "avatar"
        let width: CGFloat = 85
        let height: CGFloat = width * (437.0 / 360.0) // This is the aspect ratio of the texture
        node.size = CGSize(width: width, height: height)
        node.position = CGPoint(x: width / 2 + 50, y: Constants.groundHeight + height / 2)
        node.physicsBody = SKPhysicsBody(rectangleOf: node.size)
        node.physicsBody?.isDynamic = true // 2
        node.physicsBody?.mass = 1.0
        node.physicsBody?.allowsRotation = false
        node.physicsBody?.affectedByGravity = true
        node.physicsBody?.usesPreciseCollisionDetection = true
        node.physicsBody?.categoryBitMask = GameCategories.avatar
        node.physicsBody?.collisionBitMask = GameCategories.ground
        node.physicsBody?.contactTestBitMask = GameCategories.barrel
        return node
    }()

这是我创建桶形节点的方式:

        let barrelHeight: CGFloat = 50
        let barrelWidth: CGFloat = rockHeight * CGFloat(192.0 / 237.0)
        let barrelNode = SKSpriteNode(imageNamed: "game-barrel")
        barrelNode.name = "barrel"
        barrelNode.size = CGSize(width: barrelWidth, height: barrelHeight)
        barrelNode.position = CGPoint(x: self.frame.width + barrelWidth / 2, y: Constants.groundHeight + barrelHeight / 2)
        barrelNode.physicsBody = SKPhysicsBody(rectangleOf: barrelNode.size)
        barrelNode.physicsBody?.isDynamic = true
        barrelNode.physicsBody?.allowsRotation = false
        barrelNode.physicsBody?.affectedByGravity = false
        barrelNode.physicsBody?.usesPreciseCollisionDetection = true
        barrelNode.physicsBody?.categoryBitMask = GameCategories.barrel
        barrelNode.physicsBody?.collisionBitMask = 0
        barrelNode.physicsBody?.contactTestBitMask = GameCategories.avatar
swift sprite-kit
1个回答
0
投票

这种游戏的常见做法是使用物理学来检测您的碰撞或检查节点是否相交。

如果您正在使用物理,则需要为物理物体创建更精确的形状,但这并不总是那么容易,如果节点发生变化,则必须调整物理。 (并且在iOS 13中,通过alpha纹理的物理主体已损坏)。因此,要做的第二件事是很常见的,那就是减小物理面积,制作一个正方形,其大小为角色大小的一半,并将其对齐以使其覆盖身体和头部。

这样,您的角色可以在不发射碰撞的情况下更靠近枪管,但是如果它的身体接触到枪管,则碰撞将触发]

© www.soinside.com 2019 - 2024. All rights reserved.