2016-04-18 3 views
1

Я создаю игру, и я застрял на создании успешного метода контакта с физикой.как вызвать метод с несколькими входными параметрами в другом методе

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 в параметрах, а также вызвать мой класс хитов в моем столкновении с классом bullet.

ответ

0

Исходя из предположения, что класс 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 и поэтому могут быть вызваны на объект, а не передавать им объект.

+0

Вам не нужно называть secondNode в didBeginContact? @george Green? – gkolman

+1

, и у меня есть мой счет и оценка latel, определенная в моем файле gameScene.swift, поэтому вы хотите, чтобы я определил свою оценку в классе enemy1? Это было бы больно и могло бы вызвать проблемы позже с сохранением баллов или очков. – gkolman

+0

@gkolman Нет оценки, если она прекрасна во всем мире, поскольку она не является специфической для субъекта. Однако попадание является специфическим для противника. Я не уверен, что вы подразумеваете под своим 1-м вопросом? Возможно, вы могли бы связать меня с полным определением класса, чтобы я мог лучше понять, чего вы пытаетесь достичь? –