我知道这可能是一个愚蠢的问题,但我已经尝试了几个小时而且无法做到。所以,我正在做一个简单的游戏。我有4个功能可以让我的英雄死亡。他们每个人都在执行不同的动画,所以我希望程序知道究竟是谁杀死了一个英雄。我的逻辑是将这些函数放入数组中,但Xcode告诉我,我在调用中有一个“缺少参数#1的参数”。我忽略了这一点,并试图做一个switch语句。但每个“案例”都有一个错误,告诉我它正在期待一种模式。这是我的代码:
func didBeginContact(contact: SKPhysicsContact) {
dead()
}
var deathArray:Array = [eatenByMouse(), eatenByCat(), eatenByHamster(), eatenByRabbit()]
func dead() {
switch deathArray {
case :
eatenByMouse()
case:
eatenByCat()
case:
eatenByHamster()
case:
eatenByRabbit()
default:
cookie
}
}
这可能是一个非常简单的问题,但我是新手,不知道该怎么办。
我认为发布更多相关的代码示例是个好主意。我想,我的问题可能是碰撞。所以我有一个ColliderType:
enum ColliderType:UInt32 {
case Cookie = 1
case Rabbit = 2
case Mouse = 3
case Hamster = 4
case Cat = 5
}
然后我为英雄和敌人制作了一个物理身体:
self.cookie.physicsBody = SKPhysicsBody(circleOfRadius: CGFloat(self.cookie.size.width / 2))
self.cookie.physicsBody?.affectedByGravity = false
self.cookie.physicsBody?.categoryBitMask = ColliderType.Cookie.rawValue
self.cookie.physicsBody?.collisionBitMask = ColliderType.Mouse.rawValue
self.cookie.physicsBody?.contactTestBitMask = ColliderType.Mouse.rawValue
self.mouse.physicsBody = SKPhysicsBody(rectangleOfSize: self.mouse.size)
self.mouse.physicsBody?.dynamic = false
self.mouse.physicsBody?.categoryBitMask = ColliderType.Mouse.rawValue
self.mouse.physicsBody?.contactTestBitMask = ColliderType.Cookie.rawValue
self.mouse.physicsBody?.collisionBitMask = ColliderType.Cookie.rawValue
eatenByMouse()函数示例:
func eatenByMouse() {
self.groundSpeed = 0
self.cookie.hidden = true
let animateAction = SKAction.animateWithTextures(self.mouseArray, timePerFrame: 0.1)
self.mouse.runAction(animateAction)
}
我希望它可以清除一些东西。 这似乎是一个很容易的问题,我很惭愧,我不理解它。
答案 0 :(得分:2)
在第5行,您正在定义您的函数数组:
[ eatenByMouse(), eatenByCat(), ... ]
具有()
语法的表达式实际上会调用该函数并解析它的返回值。尝试只使用函数名称但不调用它们。
[ eatenByMouse, eatenByCat, ... ]
答案 1 :(得分:1)
我假设您可以在didBeginContact
中确定死亡类型。因此,您需要在此处确定死亡类型的索引,然后将其传递给death
函数,以便它可以找到函数引用并执行它。
如果你的死亡类型函数接受参数或返回不同的结果,你需要相应地改变数组的类型。
func didBeginContact(contact: SKPhysicsContact) {
// You will need to determine this index based on the type of contact/death.
var deathIndex:Int = 0 // Index of the type of death (e.g. eatenByMouse in this case)
dead(deathIndex)
}
var deathArray:Array<() -> ()> = [eatenByMouse, eatenByCat, eatenByHamster, eatenByRabbit]
func dead(deathIndex: Int) {
deathArray[deathIndex]()
}