ios - 如何在另一个方法中调用具有多个输入参数的方法

标签 ios xcode swift parameters

我正在创建一个游戏,并且一直致力于创建一个成功的物理接触方法。

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 以及在我与子弹类的碰撞中调用我的命中类。

最佳答案

基于类 Enemy1SKSpriteNode 的子类的假设,我想你想要的是:

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()
        }
    }
}

请记住,bulletCollisionhit 方法是 Enemy1 对象的成员,因此可以在该对象上调用而不必传递对象给他们。

关于ios - 如何在另一个方法中调用具有多个输入参数的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36703329/

相关文章:

ios - 是否可以通过 Lightning 数字 AV 适配器使用 Xcode 进行调试?

ios - UIViewController 覆盖

ios - FBSDKLoginManager logInWithReadPermissions?

ios - 如何使用约束使我们的 Freedom View Controller 可滚动?

iOS 10 测试版 : URL scheme is not working but works in iOS 9

ios - 具有多个部分的 TableView

ios - 使用 SKEffectNode 逐渐模糊 SKShapeNode

arrays - 如何将图像从另一个类传输到 UIImage 数组?

ios - NetworkExtension connectOnDemand 规则不起作用

ios - WKWebView中的蒙版图像受CORS限制