Tasten - System (quick time event)
Hey Leute
Ich probier grade ein QTE System umzusetzen. (2k3)
Soll heissen, vom Spieler wird verlangt eine gewisse Tasten Reihenfolge innerhalb eines gewissen Zeitfensters zu drücken. Für jede verlangte Taste hat man 2 Sekunde Zeit.
Drückt man eine falsche Taste, oder man ist zu langsam, hat man verloren. Drückt man die richtige Taste innerhalb des Zeitlimits geht’s mit der nächsten Taste weiter etc.
Wer Shenmue kennt kann sich das evtl. besser vorstellen :) ( http://www.youtube.com/watch?v=IgZZIrYoGL0 )
Mein Hauptproblem besteht momentan darin wie man das am besten löst mit dem Tastendrücken, bzw. wenn der Spieler eine falsche Taste drückt soll er ja quasi verlieren...
Muss man da jetzt jede mögliche (falsche) Taste in eine Variabel speichern?
Oder gibt’s da eine andere, bessere Lösung?
Bin für Anregungen dankbar!
Liste der Anhänge anzeigen (Anzahl: 1)
hab mal eben was ausprobiert:
das ist das initial event. hier werden die variabeln gesetzt. die variabeln 10 + 11 geben den key (oben, dann links) an, der gedrückt werden soll. timer ist der timer der genullt werden soll. runden ist praktisch die anzahl, wie viele keys man nacheinander drücken soll. dann wird nen switch gesetzt, um das haupt event zu starten.
counter gibt an, wo ich die variabeln lager, die meine gewollten keywerte beinhalten. in diesem fall 10 (da auf variabel id 10 mein erster keywert liegt).
Code:
<> Change Variable: [10:key1] = 4
<> Change Variable: [11:key2] = 2
<> Change Variable: [4:timer] = 0
<> Change Variable: [5:counter] = 10
<> Change Variable: [7:runden] = 2
<> Change Switch: [1] = ON
hier frage ich zuerst die keys ab, die gedrückt sind. zuerst jedoch, ob der timer kleiner=20 ist. wenn ja, wird weiter geguckt, wenn nein, ist es vorbei, und startet neu, weil eben der switch wieder auf 0 gestellt wird.
als nächstes schaue, ich ob überhaupt ein key gedrückt wurde ( != 0). dann hole ich mir den wert von meiner momentanen keyvariabel (der wert von 5:counter, beim 1. durchlauf also variable id 10). den vergleiche ich dann mit dem key, der gedrückt wurde, wenn der richtig ist, gehts weiter, wenn nicht, wird ein false ausgegeben.
wenns richtig ist, wird counter um eins erhöht (um beim nächsten durchlauf eine andere variabel zu bekommen), runden mit 1 subtrahiert. danach wird geschaut, ob runden == 0. wenn das zutrifft, ist das spiel gewonnen und es startet neu.
ganz unten wird einfach ein wait mit 0.1sec gewartet, und danach der timer um 1 erhöht.
Code:
<> Key Input Processing: Var. [3], Keys: Down, Left, Right, Up
<> Fork Condition: If Variable [4] <= 20 then ...
<> Change Variable: [6:temp] = V[V[5]]
<> Fork Condition: If Variable [3:keystore] != 0 then ...
<> Fork Condition: If Variable [3:keystore] != V[2] then ...
<> Fork Condition: If Variable [3:keystore] == V[6] then ...
<> Change Variable: [4:timer] = 0
<> Change Variable: [5:counter] += 1
<> Change Variable: [7:runden] -= 1
<> Fork Condition: If Variable [7:runden] == 0 then ...
<> Show Message: win!
<> Change Switch: [1] = OFF
<>
: End of fork
<> Jump To Label: 1
<>
: Else ...
<> Show Message: false
<> Change Switch: [1] = OFF
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: Else ...
<> Show Message: vorbei!
<> Change Switch: [1] = OFF
<>
: End of fork
<> Wait: 0,1 sec.
<> Change Variable: [4:timer] += 1
<> Label: 1
<> Change Variable: [2:keystorebefore] = V[3]
an sich würde ich das noch ein wenig anders gestalten (mehrere keywerte in eine variabel, und das ganze per modulo auflösen) aber ich wollte es einfach halten. hoffe ist verständlich, was ich meine ;)
hab das ganze auch mal angehängt.
willst du jetzt noch entsprechende richtungstasten auf dem bildschirm angezeigt haben, musst du die halt vor die tastenabfrage legen.
mfg