在SpriteKit游戏中使用didBeginContact的正确方法-Swift

拉里萨(Larisa)

我有3个精灵,它们可以相互碰撞并具有contactTestBitMaskcategoryBitMask设置。我有两个精灵,使用didBeginContact方法来查看它们是否发生碰撞,并且工作正常,但是现在我不确定如何设置它以检查多个对象的接触并运行取决于两个物体碰撞的不同函数。

我的PhysicsCategory

struct PhysicsCategory {
    static let None: UInt32 = 0
    static let All: UInt32 = UInt32.max
    static let Bird: UInt32 = 0b1
    static let Cloud: UInt32 = 0b10
    static let Desk: UInt32 = 0b100
    static let Star: UInt32 = 0b101
    static let StarSpecial: UInt32 = 0b110
}

中的didBeginContact方法GameScene

func didBeginContact(contact: SKPhysicsContact) {
    var BirdBody: SKPhysicsBody?
    var DeskBody: SKPhysicsBody?
    var SpecialStarBody: SKPhysicsBody?
    //var SpecialStarBody: SKPhysicsBody
    if contact.bodyA.categoryBitMask == PhysicsCategory.Bird {
        BirdBody = contact.bodyA
        DeskBody = contact.bodyB
    } else if contact.bodyA.categoryBitMask == PhysicsCategory.Desk {
        BirdBody = contact.bodyB
        DeskBody = contact.bodyA
    } else if contact.bodyA.categoryBitMask == PhysicsCategory.StarSpecial {
        SpecialStarBody = contact.bodyA
    }
    if (DeskBody != nil) {
        birdSprite.BirdDidCollideWithDesk(BirdBody?.node as! Bird, desk: DeskBody?.node as! Desk, scoreClass: scoreClass, scoreLabel: scoreLabel)
    }
}

我要检查的是鸟儿是否与桌子接触,在这种情况下,它应该运行鸟儿和桌子的功能,否则我想看看鸟儿是否与SpecialStar接触,我还没有我为这种情况写了一个函数,但是稍后,我将为这种情况调用一个不同的函数。我还要添加一些其他的sprite,因此,如果有人可以解释如何做到这一点,以使代码写得好而不引起任何错误,我将不胜感激。

达尔文

您可以检查鸟儿是否与办公桌接触

if ((contact.bodyA.categoryBitMask == PhysicsCategory.Bird && contact.bodyB.categoryBitMask == PhysicsCategory.Desk) ||
(contact.bodyA.categoryBitMask == PhysicsCategory.Desk && contact.bodyB.categoryBitMask == PhysicsCategory.Bird)) {

    print("Bird, desk")
    // Handle contact bird with desk
}

鸟与明星接触

if ((contact.bodyA.categoryBitMask == PhysicsCategory.Bird && contact.bodyB.categoryBitMask == PhysicsCategory.StarSpecial) ||
(contact.bodyA.categoryBitMask == PhysicsCategory.Desk && contact.bodyB.categoryBitMask == PhysicsCategory.StarSpecial)) {

    print("Bird, StarSpecial")
    // Handle contact bird with StarSpecial
}

请注意:变量应以小写字母开头。

为了保持代码清晰,我建议为每个节点创建类文件。

import Foundation
import SpriteKit

class Monster: SKSpriteNode {

    init(world: SKNode) {

    super.init(texture: SKTexture(imageNamed: "MonsterImageName"), color: UIColor.clearColor(), size: CGSizeMake(world.frame.size.width / 18, world.frame.size.width / 36))
    position = CGPointMake(world.frame.size.width / 2, world.frame.size.height / 2)
    zPosition = 100

    // etc
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

并像这样添加

var monster = Monster.init(world)
world.addChild(monster)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用Swift在SpriteKit游戏中创建“分享到Facebook按钮”?

来自分类Dev

如何在Swift SpriteKit中的游戏中保存“硬币”?

来自分类Dev

在Swift 2.1的Spritekit游戏中获取EXC_BAD_ACCESS

来自分类Dev

将Revmob集成到SpriteKit Swift游戏中

来自分类Dev

在射击游戏中自动射击 (Swift 4 - SpriteKit)

来自分类Dev

使用 swift 的精灵套件游戏中的游戏内教程

来自分类Dev

Swift游戏中心认证

来自分类Dev

在Swift游戏中处理圆-圆碰撞的最佳方法?

来自分类Dev

在游戏中使用正确的多线程

来自分类Dev

使用Sprite Kit和Swift在游戏中显示当前得分

来自分类Dev

如何使用Sprite Kit和Swift在游戏中设置高分

来自分类Dev

我可以在iOS游戏中使用OS X Swift源文件,还是可以将其重新制作为iOS?

来自分类Dev

如何使用Swift在SpriteKit中使SpriteNode旋转?

来自分类Dev

在AppKit App Swift中使用SpriteKit

来自分类Dev

如何使用Swift在SpriteKit中使SpriteNode旋转?

来自分类Dev

使用 spritekit swift 为游戏快速创建主菜单

来自分类Dev

Swift-无法显示游戏中心

来自分类Dev

Swift Sprite Kit中的游戏中心

来自分类Dev

这是在Swift中使用回调的正确方法吗?

来自分类Dev

在Swift中使用选择器的正确方法

来自分类Dev

didBeginContact在Swift 2 + SpriteKit中不起作用

来自分类Dev

在游戏中使用演员

来自分类Dev

在游戏中使用Bower

来自分类Dev

在游戏中使用Bower

来自分类Dev

基本的Swift / Spritekit游戏-重绘问题

来自分类Dev

碰撞类型源错误-Spritekit Swift游戏

来自分类Dev

在 Swift 中使用 CLLocationManager 的正确代码设计

来自分类Dev

在Swift中使用shouldPerformSegueWithIdentifier()方法

来自分类Dev

如何在Swift和SpriteKit中使用whiteColor

Related 相关文章

热门标签

归档