Raf*_*fAl 28 objective-c bit-masks ios sprite-kit swift
要在Objective-C中定义类别位掩码枚举,我曾经输入:
typedef NS_OPTIONS(NSUInteger, CollisionCategory)
{
CollisionCategoryPlayerSpaceship = 0,
CollisionCategoryEnemySpaceship = 1 << 0,
CollisionCategoryChickenSpaceship = 1 << 1,
};
Run Code Online (Sandbox Code Playgroud)
我怎样才能实现相同的使用Swift
?我尝试了枚举,但无法使其正常工作.这是我到目前为止所尝试的.
Wil*_* T. 19
如果你看一下这个swift教程,你可以使用以下命令来避免整个toRaw()或rawValue转换:
struct PhysicsCategory {
static let None : UInt32 = 0
static let All : UInt32 = UInt32.max
static let Monster : UInt32 = 0b1 // 1
static let Projectile: UInt32 = 0b10 // 2
}
monster.physicsBody?.categoryBitMask = PhysicsCategory.Monster
monster.physicsBody?.contactTestBitMask = PhysicsCategory.Projectile
monster.physicsBody?.collisionBitMask = PhysicsCategory.None
Run Code Online (Sandbox Code Playgroud)
小智 9
看看AdvertureBuilding SpriteKit游戏.他们在Swift中重建了它,您可以在iOS8开发站点上下载源代码.
他们使用以下创建枚举的方法:
enum ColliderType: UInt32 {
case Hero = 1
case GoblinOrBoss = 2
case Projectile = 4
case Wall = 8
case Cave = 16
}
Run Code Online (Sandbox Code Playgroud)
设置就像这样
physicsBody.categoryBitMask = ColliderType.Cave.toRaw()
physicsBody.collisionBitMask = ColliderType.Projectile.toRaw() | ColliderType.Hero.toRaw()
physicsBody.contactTestBitMask = ColliderType.Projectile.toRaw()
Run Code Online (Sandbox Code Playgroud)
并检查如下:
func didBeginContact(contact: SKPhysicsContact) {
// Check for Projectile
if contact.bodyA.categoryBitMask & 4 > 0 || contact.bodyB.categoryBitMask & 4 > 0 {
let projectile = (contact.bodyA.categoryBitMask & 4) > 0 ? contact.bodyA.node : contact.bodyB.node
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
16293 次 |
最近记录: |