Touch Steuerung?

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Touch Steuerung?

    Hallo,

    Ich arbeite immernoch an meinem Spiel und hätte noch ein Frage.

    Wenn man als Anfänger sich den Code eines Spiels anguckt, kann man die meisten Sachen sehr gut verstehen, manche Sachen so einigermaßen, aber was ich bis jetzt nicht verstanden habe, ist wie so eine Touch Steuerung aufgebaut ist. Von "alles blind aus dem Buch abschreiben" halte ich nichts, denn davon lerne ich ja nicht.

    Könntet ihr mir noch einmal die Steuerung erklären (also was TouchesBegan, TouchesMoved ... ist und was darin steht) und am besten anhand der Swipe Steuerung (oder wie man sie nennt, ich meine jetzt die Art wie man Temple Run, Subway Surf und so weiter steuert).

    Danke,

    asteiger


    PS: Vllt. kommen heute von mir ein paar mehr fragen, denn ich habe die nächsten Tage nur Zeit zum programmieren, deshalb frage ich am besten vorher...
  • Die Abfolge der drei genannten Methoden ist ja in der Regel (mit der Ausnahme touchesCancelled:withEvent:) immer gleich. Cocoa leitet die Geste über touchesBegin:withEvent: ein. Dann folgen beliebig viele touchesMoved:withEvent:, und das Ende signalisiert ein touchesMoved:withEvent:. Die Verarbeitung erfolgt auch immer relativ ähnlich: Du ermittelst in den Methoden die Fingerposition, und wertest die ermittelten Positionen zueinander aus. Willst Du beispielsweise einen Swipe erkennen, kannst Du beispielsweise die Richtung und die Länge der gedachten Linie von zwei Punkten ermitteln. Wenn die Werte (Winkel und Länge) in einem bestimmten Bereich liegen, hast Du einen Swipe. (Natürlich gibt es mehrere Auswertungsmöglichkeiten.)

    Sofern es möglich ist, würde ich dafür aber möglichst Gesture-Recognizer bevorzugen, da es damit wesentlich einfacher ist, unterschiedliche Gesten (Swipe, Pinch usw.) auseinanderzuhalten.
    „Meine Komplikation hatte eine Komplikation.“
  • Okay, Danke für die Antworten.

    Am besten verstehe ich es aber anhand eines Codebeispiels:

    Quellcode

    1. - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { //TouchSteuerung wird eingeleitet. Geht das immer gleich?
    2. [self touchesMoved:touches withEvent:event]; //?
    3. }
    4. - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { //TouchesMoved folgt. Also da steuert er.
    5. NSArray *allTouches = [touches allObjects]; //?
    6. CGPoint coord = [[allTouches objectAtIndex:[allTouches count]-1] //?
    7. locationInView:self.view]; //?
    8. - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { //Ende wird eingeleitet
    9. NSArray *allTouches = [touches allObjects]; //?
    10. CGPoint coord = [[allTouches objectAtIndex:[allTouches count]-1] //?
    11. locationInView:self.view]; //?
    Alles anzeigen


    So ich habe jetzt nur die Touchesmethoden von einem anderen Spiel hintereinander gehängt. Deshalb fehlen auch einige }.
    Die Zeilen wo Fragen oder nur ein Fragezeichen steht, verstehe ich noch nicht. Also bei den meisten nur zum Teil nicht, denn dass bei machen zum Beispiel ein Array erstellt wird verstehe ich wohl.
    Wo genau programmiert man dann ein was durch die Steuerung passiert zum Beispiel XKoordinate++ oder so?
  • also ein array erstellst du nirgends...

    in der touchesBegan initalisiert man das ganze halt (also man legt fest was man grad angegriffen hat etc)

    in der touchesMoved holst du hier die coordinate des letztn touch (es können ja mehrere sein). dazu nimmt man normal aber lastObject und nicht diesen unsinnigen, unsicheren, unübersichtlichen und langsameren weg wie im code oben.
    anhand der koordinate kannst du dann das ding dass du zb grad "angefasst" hast auf der oberfläche rumschieben...

    in der touchesEnded beendest du das ganze eben.
    also wenn es eine gültige location ist dann packst du das angefasste ding eben dort hin, ansosnsten lässt du es zum startpunkt zurückspringen oder was auch immer.

    edit: sorry, statt lastObject natülrich anyObject weil es ja ein set ist und kein array. die ganze umwandlung in array und dann über den index kannst dir also sparen.
    edit2: das ganze in dem code oben kann man so korrigieren: CGPoint coord = [[touches anyObject] locationInView:self.view];

  • Okay, danke.Und dann bei der Swipe Steuerung, muss ich dann zB überprüfen lassen ob die X-Koordinate von dem Punkt an dem man den Bildschirm berührt größer oder kleiner ist als die wo man loslässt? Und dann muss ich da noch die Winkel einbauen, damit er einen diagonalen Swipe nicht als rechts und hoch oder so erkennt, oder geht das ganz anders?Und wie funktioniert es mit dem zuvor angedeuteten Gesture-Recognizer?
  • asteiger schrieb:

    Okay, danke.Und dann bei der Swipe Steuerung, muss ich dann zB überprüfen lassen ob die X-Koordinate von dem Punkt an dem man den Bildschirm berührt größer oder kleiner ist als die wo man loslässt? Und dann muss ich da noch die Winkel einbauen, damit er einen diagonalen Swipe nicht als rechts und hoch oder so erkennt, oder geht das ganz anders?Und wie funktioniert es mit dem zuvor angedeuteten Gesture-Recognizer?


    dafür reicht start und endpunkt nicht denn zwischendrin kann ja jemand einen ganzen hund gezeichnet haben.

    für einfache gesten gibt es wie gesagt den gesturerecognizer.
  • asteiger schrieb:

    Aber die Touchsteuerung ist nur ein Teil von dem Spiel, und im Bäckerforum kann man fragen, wie man am besten die Creme für den Kuchenvorbereitet, oder nicht?


    ein sinnvolle frage wäre wie man eine bestimmte zutat einer bestimmten creme für einen bestimmten kuchen dosiert sodass die auch bei höheren temperaturen ihre konsistenz behällt ;)

    alles was man bei google per einfacher suche findet braucht man nicht fragen - vor allem wenn die antwort ewig lang wäre.
  • asteiger schrieb:

    Also die meisten Tutorials, die ich gefunden habe im bezug auf den iOS Gesture Recognizer waren auf Englisch und Objective C zu lernen ist auch schon schwer genug mit deutschen Tutorials. Kann jemand von euch ein gutes Tutorial oder eine gute Seite mit Tutorials (auch zum Gesture Recognizer) empfehlen?

    Ohne Englisch kommst du nicht weit. Das ist extrem wichtig bei der Programmierung in Objective C. Alle ist englisch. Doku, Apple Videos viele Tutorials und Lösungen zu Problemen. Alles ist Englisch.
  • Sorry, da habe ich mich wohl nicht klar genug ausgedrückt. Englisch kann ich ja, aber es ist immer leichter etwas in der eigenen Muttersprache zu lesen. Darum habe ich einfach mal gefragt ob ihr da was kennt ;). Aber das hat sich jetzt geklärt ich habe das Thema in einem Buch gefunden, wobei dabei nicht der Name Gesture Recognizer benutzt wurde, weshalb ich es nicht in der iBooksuche gefunden habe. Aber es scheint das gleiche zu sein, und wenn nicht, dann eine andere Art das Ganze zu programmieren. Danke für eure Antworten ;D