2017-12-21 8 views
0

Ich versuche, eine Funktion mit per (_: onTarget :) als Teil einer Sequenz von SKAction aufrufen.So verwenden Sie die Methode für SKAction in Swift

Ich habe versucht:

let action1 = SKAction.fadeIn(withDuration: TimeInterval(0.2)) 
let action2 = SKAction.wait(forDuration: TimeInterval(0.4)) 
let action3 = SKAction.fadeOut(withDuration: TimeInterval(0.1)) 
let action4 = SKAction.perform(self.blinkLightByOrder, onTarget: UFOSprite._ufoBase) 
let action5 = SKAction.sequence([action1, action2, action3, action4]) 

currentLight.run(action5) 

Wenn ich SKAction.run (Block:() -> Void) wie folgt aus:

let action4 = SKAction.run(self.blinkLightByOrder) 

es funktioniert, aber ich brauche Objekt senden wie diese Methode fragen Sie nach SKSpriteNode:

func blinkLightByOrder(onSprite: SKSpriteNode) 

aber ich halte Fehler immer und kann nicht verstehen, wie diese Aktion durchführen zu implementieren. Dank

+1

Was genau ist der Fehler, den Sie bekommen? – halileohalilei

+0

Der Fehler lautet: Wert des Typs '()' kann nicht in den erwarteten Argumenttyp 'Selektor' konvertiert werden. – EranKT

+0

Lassen Sie action4 = SKAction.run (self.blinkLightByOrder) funktioniert als run (block :) aber ich muss Objekt (SKSpriteNode) an diese Methode senden. – EranKT

Antwort

0

Die Antwort in den Kommentaren von Orkhan Alikhanov

SKAction.run { self.blinkLightByOrder(onSprite: mySprite) } 

hat gut funktioniert!

Nun änderte ich die Methode wie folgt:

 currentLight.run(
     SKAction.run { 
      SKAction.sequence([ 
       SKAction.fadeIn(withDuration: TimeInterval(0.2)), 
       SKAction.wait(forDuration: TimeInterval(0.4)), 
       SKAction.fadeOut(withDuration: TimeInterval(0.1)), 
      SKAction.run{ self.blinkLightByOrder() }] 
      ) 
    }) 

und es funktioniert wie erwartet! Vielen Dank :)

0

Wenn ich Ihr Problem richtig verstehe ich denke, dass Sie nur eine Funktion wie diese zu finden versuchen:

blinkLightByOrder(onSprite: currentLight) 

func blinkLightByOrder(onSprite: SKSpriteNode){ 
    onSprite.run(action4) 
} 

Es ist für mich gearbeitet und ist nur eine einfache Anruffunktion

Verwandte Themen