gpt4 book ai didi

Swift:不制裁剪理体的 Sprite 碰撞检测?

转载 作者:行者123 更新时间:2023-11-28 05:29:27 25 4
gpt4 key购买 nike

好吧,我对 sprite kit 还很陌生,而且我正在使用 Swift 工作。我有 2 个 Sprite 节点,saviorchicken1savior 有一个物理 body ,我是这样设置它的:

var saviorTexture = SKTexture(imageNamed: "1.png")
saviorTexture.filteringMode = SKTextureFilteringMode.Nearest

savior = SKSpriteNode(texture: saviorTexture)
savior.setScale(0.2)
savior.position = CGPoint(x: self.frame.size.width * 0.5, y: self.frame.size.height * 0.2)
savior.physicsBody?.dynamic = true
savior.physicsBody?.allowsRotation = false
savior.physicsBody = SKPhysicsBody(rectangleOfSize: CGSizeMake(savior.size.width, savior.size.height))

self.addChild(savior)

chicken1 现在没有物理 body :

var chickenTexture = SKTexture(imageNamed: "block1")

chicken1 = SKSpriteNode(texture: chickenTexture)
chicken1.setScale(0.75)
chicken1.position = CGPoint(x: self.size.width * 0.38, y: self.size.height * 1.2)
self.addChild(chicken1)

我需要知道如何在这些对象之间进行碰撞检测(即如果 savior 和 chicken1 接触,则执行此操作),最好不要将 chicken1 设为物理体。

当我将 chicken1 设为物理体时,它突然变得不稳定并四处移动其他物体。

如果没有一种方法可以在没有物理的情况下进行碰撞检测,我怎样才能使 chicken1 成为一个不受任何影响并直接穿过其他物理体的物理体?

编辑***************

所以我关注了beginner swift sprite kit - node collision detection help (SKPhysicsContact)并且有:

  1. 将我的类更改为 SKPhysicsContactDelegate:

    GameScene 类:SKScene、SKPhysicsContactDelegate {

  2. 编写如下:

        self.physicsWorld.contactDelegate = self

    savior.physicsBody?.categoryBitMask = saviorCategory
    savior.physicsBody?.contactTestBitMask = animalCategory
    savior.physicsBody?.collisionBitMask = 0

    chicken1.physicsBody?.categoryBitMask = animalCategory
    chicken1.physicsBody?.contactTestBitMask = saviorCategory
    chicken1.physicsBody?.collisionBitMask = 0

    func didBeginContact(contact: SKPhysicsContact) {

    var saviorPhysics: SKPhysicsBody
    var chicken1Physics: SKPhysicsBody

    if contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask
    {
    saviorPhysics = contact.bodyA
    chicken1Physics = contact.bodyB
    }
    else {
    saviorPhysics = contact.bodyB
    chicken1Physics = contact.bodyA
    }

    if saviorPhysics.categoryBitMask == 0 && chicken1Physics.categoryBitMask == 1 {
    self.chicken1.removeFromParent()
    }

    }

我运行它并且没有错误,但它不起作用。

最佳答案

您可以使用 categoryBitMask 并通过响应 SKSceneContactDelegate 自行处理碰撞。

这样您就可以为不同的节点设置不同的类别,并根据需要处理不同类别之间的碰撞。

教程:

http://seodoa.com/2014/04/01/skphysicsbody-react-to-contact-but-not-to-collide/

关于Swift:不制裁剪理体的 Sprite 碰撞检测?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29482521/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com