首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >雪碧试剂盒接触检测

雪碧试剂盒接触检测
EN

Stack Overflow用户
提问于 2017-04-20 13:59:03
回答 1查看 1.1K关注 0票数 0

基本上,我有地面,球员(雷蒙德)和硬币。当玩家触地时,任何事情都不应该发生,游戏继续正常进行。当玩家接触到硬币时,我想让它打印到控制台“硬币与玩家的接触”。

代码语言:javascript
复制
enum ColliderType: UInt32 {
    case Raymond = 1
    case Object = 2
    case Coin = 3
}

雷蒙兹物理

代码语言:javascript
复制
raymond.physicsBody = SKPhysicsBody(circleOfRadius: raymondTexture.size().height/2)
    raymond.physicsBody!.dynamic = true

    raymond.physicsBody!.categoryBitMask = ColliderType.Raymond.rawValue
    raymond.physicsBody?.contactTestBitMask = ColliderType.Object.rawValue
    raymond.physicsBody?.collisionBitMask = ColliderType.Object.rawValue

硬币物理学

代码语言:javascript
复制
        coin.physicsBody = SKPhysicsBody(circleOfRadius: raymondTexture.size().height/2)
    coin.physicsBody!.dynamic = true

    coin.physicsBody!.categoryBitMask = ColliderType.Coin.rawValue
    coin.physicsBody?.contactTestBitMask = ColliderType.Raymond.rawValue
    coin.physicsBody?.collisionBitMask = ColliderType.Object.rawValue

如果需要的话,地面物理

代码语言:javascript
复制
        ground.physicsBody = SKPhysicsBody(rectangleOfSize: CGSizeMake(self.frame.size.width, 1))
    ground.physicsBody!.dynamic = false
    ground.physicsBody!.categoryBitMask = ColliderType.Object.rawValue
    ground.physicsBody?.contactTestBitMask = ColliderType.Object.rawValue
    ground.physicsBody?.collisionBitMask = ColliderType.Object.rawValue

这是我的联系函数,我知道它是错误的,我需要帮助如何检测硬币和雷蒙德触摸。

代码语言:javascript
复制
    func didBeginContact(contact: SKPhysicsContact) {
    print("coin contact with player")

}

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2017-04-20 14:17:10

有几种检查方法,这里有两个最基本的方法让你开始。第一个检查联系人名称,第二个检查CategoryBitMask。值得注意的是,如果没有正确设置PhysicsBodies位掩码,那么两个对象之间的联系人可能永远不会被报告。

编辑确保场景符合SKPhysicsContactDelegate

代码语言:javascript
复制
class GameScene: SKScene, SKPhysicsContactDelegate

..。

代码语言:javascript
复制
func didBegin(_ contact: SKPhysicsContact) {

    let contactAName = contact.bodyA.node?.name
    let contactBName = contact.bodyB.node?.name

    if (contactAName == "raymond") || (contactBName == "raymond") {

         if (contactAName == "coin") || (contactBName == "coin") {
             print("coin contact with player")
             return
        }
    }

    //or

    if contact.bodyA.categoryBitMask == ColliderType.Coin || contact.bodyB.categoryBitMask == ColliderType.Coin {

        if contact.bodyA.categoryBitMask == ColliderType.Raymond || contact.bodyB.categoryBitMask == ColliderType.Raymond {
            print("coin contact with player")
            return
        }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43521671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档