2017-04-25 2 views
-5

es scheint, dass ich eine Menge Fragen hier gestellt habe. Ich muss jetzt wissen, wie man einen Feind fallen lässt, nachdem er zerstört wurde. Ich habe es so, wenn der Spieler mit dem Feind kollidiert, wird es den Feind zerstören, aber ich brauche es also, wenn der Feind zerstört wird, wird es einen Gegenstand an seiner Stelle hervorbringen.Spritekit Feind einen Gegenstand fallen lassen

herer der Code für die Zerstörung des Feindes:

func handleAttackButtonHover(isHovering : Bool) { 
    if isHovering { 
     attackButton.texture = attackButtonPressedTexture 
     invincible = true 
     print("invincible = true") 
     playerNode?.removeAction(forKey:"animate") 
     playerNode?.run(attackAnimation,completion:{ 
      self.playerNode?.run(self.animation,withKey: "animate")}) 
    } else { 
     attackButton.texture = attackButtonTexture 
     invincible = false 
     print("invincible = false") 
     playerNode?.removeAction(forKey:"attackAnimation") 
     playerNode?.run(animation,completion:{ 
      self.playerNode?.run(self.animation,withKey: "animate")}) 
    } 
} 

und auch:

//physicsbody for player and enemies and coins 
func didBegin(_ contact: SKPhysicsContact) { 
    //  var bodyA = SKPhysicsBody() 
    //  var bodyB = SKPhysicsBody() 
    //print("collision detected") 
    if contact.bodyA.node?.name == "player" || contact.bodyB.node?.name == "player" { 
    //print("collision detected") 
     if contact.bodyA.node?.name == "enemy" { 
      if invincible == true { 
       contact.bodyA.node?.removeFromParent() 
      } else { 
       contact.bodyB.node?.removeFromParent() 
      } 
     } else if contact.bodyB.node?.name == "enemy" { 
      if invincible == true { 
       contact.bodyB.node?.removeFromParent() 
      } else { 
       contact.bodyA.node?.removeFromParent() 
      } 
     } 

    } 

} 
+0

Also, was ist das ** spezifische ** Problem? Warum der Code-Dump? – dfd

+0

Ich zeigte, wie ich die Zerstörung des Gegners eingerichtet habe. was ich brauchte, ist, dass ich nicht weiß, welcher Code benötigt würde, um es so zu machen, wenn der Feind zerstört wird, würde ich einen Gegenstand dort spawn –

+0

haben Sie irgendetwas versucht, um es geschehen zu lassen oder Sie sind einfach Kopieren-Einfügen Code aus den Antworten, die Sie bekommen? – BadgerBadger

Antwort

1

Sie könnten eine Funktion machen, die in einem CGPoint nimmt. Der CGPoint wird verwendet, um die Artikelposition festzulegen. So etwas wie dieses

func spawnItem(point: CGPoint) { 
    //create the skspritenode 
    let item = SKSpriteNode(imageNamed: "coin"); 
    //Set the item position to the position you passed into the function 
    item.position = point 
    //Set the name of the item 
    item.name = "Coin" 

    //set up physics if needed 
    item.physicsBody = SKPhysicsBody.init(circleOfRadius: self.size.width/2) 
    item.physicsBody?.categoryBitMask = PhysicsCatagory.coin 
    item.physicsBody?.collisionBitMask = PhysicsCatagory.player 
    //And so on 

    //Then add it to your scene 
    self.addChild(item) 
} 

Dann, wenn Sie den Feind treffen, rufen Sie die Spawn-Funktion in der feindlichen Position übergeben.

func didBegin(_ contact: SKPhysicsContact) { 
    //  var bodyA = SKPhysicsBody() 
    //  var bodyB = SKPhysicsBody() 
    //print("collision detected") 
    if contact.bodyA.node?.name == "player" || contact.bodyB.node?.name == "player" { 
    //print("collision detected") 
     if contact.bodyA.node?.name == "enemy" { 
      if invincible == true { 
       spawnItem(point: contact.bodyA.node!.position) 
       contact.bodyA.node?.removeFromParent() 
      } else { 
       spawnItem(point: contact.bodyB.node!.position) 
       contact.bodyB.node?.removeFromParent() 
      } 
     } else if contact.bodyB.node?.name == "enemy" { 
      if invincible == true { 
       spawnItem(point: contact.bodyB.node!.position) 
       contact.bodyB.node?.removeFromParent() 
      } else { 
       spawnItem(point: contact.bodyA.node!.position) 
       contact.bodyA.node?.removeFromParent() 
      } 
     } 
    } 
} 

Hoffe das bringt Sie auf den richtigen Weg.

2

Ich würde den Gegenstand bei der Erstellung an den Feind anhängen, dann, wenn er zerstört ist, kannst du den angehängten Gegenstand nehmen, ihn zur Szene bewegen und dann den Feind töten.

func didBegin(_ contact: SKPhysicsContact) { 

    //You may want to think about doing integer base checks instead of string 
    let player = (contact.bodyA.node?.name == "player") ? contact.bodyA.node : (contact.bodyB.node?.name == "player") ? contact.bodyB.node : nil 
    let enemy = (contact.bodyA.node?.name == "enemy") ? contact.bodyA.node : (contact.bodyB.node?.name == "enemy") ? contact.bodyB.node : nil 

    if player != nil && enemy != nil{ 

     if invincible == true { 
      let item = player.childNodeWithName("item") 
      item.move(toParent:self) 
      item.isHidden = false 
      player.removeFromParent() 
     } else { 
      let item = enemy.childNodeWithName("item") 
      item.move(toParent:self) 
      item.isHidden = false 
      enemy.removeFromParent() 
     } 
    } 
} 
Verwandte Themen