【发布时间】:2016-02-19 03:45:38
【问题描述】:
我在 Swift 中使用 SpriteKit,遇到以下情况:
- 我在超类级别构造了一个结构,该结构具有一个 UInt32 列表,用于表示建立物理体类型所需的各种位掩码。 (这很愚蠢,因为结构属性不能在子类中被覆盖。考虑删除。)
- 在子类中,我创建了一个物理体,它具有 UInt32(4) 的碰撞、接触和类别位掩码,由超类结构中的静态常量引用。
- 这些实体从结构属性中使用 UInt(2) 位掩码在超类中创建的地面落下。
- 当我将静态常数从 UInt(4) 更改为 0 - 32 之间任何奇数的无符号整数 32 时,尸体不会从地面掉落。使用任何偶数都会使尸体掉到地上。
超类.swift
struct physicsBitMasks {
static let one = UInt32(1) //for player
static let two = UInt32(2) //for ground
static let three = UInt32(3) //for you don't need to know
static let four = UInt32(4) //for enemy
...
ground.physicsBody?.categoryBitMask = physicsBitMasks.one
ground.physicsBody?.contactTestBitMask = physicsBitMasks.one
ground.physicsBody?.collisionBitMask = physicsBitMasks.two
}
子类.swift
Subclass: Superclass {
//create enemy
thing.physicsBody?.categoryBitMask = physicsBitMasks.four
thing.physicsBody?.contactTestBitMask = physicsBitMasks.four
thing.physicsBody?.collisionBitMask = physicsBitMasks.four
}
敌人从地上掉下来
重新定义 超类.swift
struct physicsBitMasks {
static let one = UInt32(1) //for player
static let two = UInt32(2) //for ground
static let three = UInt32(3) //for you don't need to know
static let four = UInt32(5) // or 7, 9, ...31 for enemy
}
敌人不会掉到地上。
发生了什么事?
【问题讨论】:
标签: swift sprite-kit