我正在创建一个游戏,并且一直致力于创建一个成功的物理接触方法。
func bulletCollisionWithEnemy1(enemy1: SKSpriteNode, bullet1: SKSpriteNode){ // my enemy1 and bullet are defined in my game scene
score += 1
scoreLabel.text = "\(score)"
bullet1.removeFromParent ()
hitCount++
}
func enemy1Hit (enemy1:Enemy1) { //my enemy1 is defined in my game scene and my Enemy1 is a separate SKSNode class i have created containing physics properties and vars ect.
if (enemy1.hit() == true) {
//enemy hit animation
}else{
//for animations
}
}
这里是我定义接触物理的地方
func didBeginContact(contact: SKPhysicsContact) {
let firstBody : SKPhysicsBody = contact.bodyA
let secondBody : SKPhysicsBody = contact.bodyB
if ((firstBody.categoryBitMask == PhysicsCategory.bullet1) &&
(secondBody.categoryBitMask == PhysicsCategory.enemy1) ||
(firstBody.categoryBitMask == PhysicsCategory.enemy1) &&
(secondBody.categoryBitMask == PhysicsCategory.bullet1)) {
if let firstNode = firstBody.node as? SKSpriteNode, secondNode = secondBody .node as? SKSpriteNode {
bulletCollisionWithEnemy1((firstNode), bullet1: (secondNode))
}
我的问题是我找不到调用 enemy1hit() 函数的方法。我的 hit() 函数是在我的 Enemy1 类中定义的,所以我必须在参数中调用我的 Enemy1 以及在我与子弹类的碰撞中调用我的命中类。
最佳答案
基于类 Enemy1
是 SKSpriteNode
的子类的假设,我想你想要的是:
class Enemy1: SKSpriteNode {
func bulletCollision(bullet1: SKSpriteNode){ // my enemy1 and bullet are defined in my game scene
score += 1
scoreLabel.text = "\(score)"
bullet1.removeFromParent ()
hitCount++
}
func hit() { //my enemy1 is defined in my game
// scene and my Enemy1 is a separate SKSNode class i have created
//containing physics properties and vars ect.
if (enemy1.hit() == true) {
//enemy hit animation
} else {
//for animations
}
}
}
无论您的代表在哪里:
func didBeginContact(contact: SKPhysicsContact) {
let firstBody : SKPhysicsBody = contact.bodyA
let secondBody : SKPhysicsBody = contact.bodyB
if ((firstBody.categoryBitMask == PhysicsCategory.bullet1) &&
(secondBody.categoryBitMask == PhysicsCategory.enemy1) ||
(firstBody.categoryBitMask == PhysicsCategory.enemy1) &&
(secondBody.categoryBitMask == PhysicsCategory.bullet1)) {
if let firstNode = firstBody.node as? Enemy1, secondNode = secondBody .node as? SKSpriteNode {
firstNode.bulletCollision(secondNode)
firstNode.hit()
}
}
}
请记住,bulletCollision
和 hit
方法是 Enemy1
对象的成员,因此可以在该对象上调用而不必传递对象给他们。
关于ios - 如何在另一个方法中调用具有多个输入参数的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36703329/