2016-03-22 13 views
0

In meiner vorherigen App (Einzelansicht-Anwendung) habe ich Touch-Down und Touch-Up in IBActions für Schaltflächen in meinem Spiel verwendet. In einem SpriteKit-Spiel musst du die Szene komplett erstellen und es fällt mir schwer, meine touchesBegan Methode zu programmieren.wie man UIbuttons/IBactions in Berührungsmethoden für ein Sprite-Kit-Spiel codiert

Hier ist meine Grundbewegung Methode/Funktion ist:

func heroMovementLeft() { 

    hero.position = CGPointMake(hero.position.x - 0.5,hero.position.y); 

} 

hier ist mein Pfeil nach links Knoten, würde ich die HeroMovementLeft Methode, um die Leftarrow genannt werden möchte

func LeftArrow() { 

    let LeftArrow = SKSpriteNode(imageNamed: "Left Arrow.png") 
    LeftArrow.position = CGPointMake(30, 30) 
    self.addChild(LeftArrow) 
} 

Hier bei Berührung ist, wo ich Bin gerade jetzt für die Codierung der touchesBegan Methode

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
     /* Called when a touch begins */ 

     for touch in touches { 
     } 
} 

Erstelle ich eine if-Anweisung? Berühre ich Berührung als Variable? Was ich in meinen Berührungen schreiben muss, begann Methode, damit sich mein Held bewegt, wenn der linke Pfeil berührt wird. Ich habe mich online angeschaut und finde keine Antwort auf diese Frage, bitte helfen Sie mir.

+1

Mögliche Duplikate von [Einrichten von Schaltflächen in SKScene] (http://stackoverflow.com/questions/19082202/setting-up-buttons-in-skscene) –

+0

Es gibt wenige Wege zu gehen. Am einfachsten wäre es, dem Knoten, den Sie verschieben möchten, den Namen zu geben und in der touchesBegan-Methode 'nodeAtPoint' zu verwenden, um" wenn Sie den rechten Knoten berühren "zu sehen ... – Whirlwind

Antwort

1

Sie haben grundsätzlich zwei Möglichkeiten, um Ihre Sprites

1) machen sie globale Eigenschaften zu Ihrer Szene

class YourScene: SKScene { 

    var leftArrow: SKSpriteNode! 

    override func didMoveToView(view: SKView) { 

    } 


    func leftArrow() { 

     leftArrow = SKSpriteNode(imageNamed: "Left Arrow.png") 
     leftArrow.position = CGPointMake(30, 30) 
     addChild(leftArrow) 
    } 
} 

als in Noten zu identifizieren begann können Sie den Standort erhalten, wie so

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    /* Called when a touch begins */ 

    for touch in touches { 
     let location = touch.locationInNode(self) 
     let node = nodeAtPoint(location) 

     if node == leftArrow { 
      heroMovementLeft() 
     } 
     } 
    } 

Option 2 besteht darin, Ihren Sprites Namen

func leftArrow() { 
    let leftArrow = SKSpriteNode(...) 
    leftArrow.name = "LeftArrow" 
    ... 
} 
zu geben

und als Kontrolle für die Namen in den Berührungen begann Methode

.... 
    if node.name == "LeftArrow" { 
    heroMovementLeft() 
    } 

Als Seite beachten Sie die Eigenschaften oder func mit Kleinbuchstaben und nur beginnen Klassen, Strukturen und Protokolle mit Großbuchstaben beginnen soll.

+0

Danke für die Hilfe @ crachoveride777 ich nicht mehr Wenn ich die Anwendung im Simulator starte, wird der Pfeil nicht auf dem Bildschirm angezeigt. Ich habe mehrere verschiedene CGpoints ausprobiert. Könnte das sein, weil ich den addChild (leftArrow) Code in meiner Übersteuerungsfunktion nicht ausgeführt habe didMoveToView (view: SKView) } ??? –

+0

Sie müssen immer addChild (YourSprite) aufrufen, um es der Szene hinzuzufügen. – crashoverride777

+0

Ich dont Mann das hat nichts mit der Frage zu tun, die Sie gefragt haben. Haben Sie andere Bilder wie Hintergrund Sprites, die es abdecken könnten. Versuchen Sie, den Pfeil eine zPosition höher als Ihr Hintergrund Sprite, wenn Sie einen haben. – crashoverride777