Replay a la Quake
Übersicht

r.hensonBetreff: Replay a la Quake |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo, ich möchte in meinem Spiel eine Replay-Option einbauen.
(also eine Spiel-Sequenz zu einem späteren Zeitpunkt noch einmal - quasi offline - wiedergeben können. Dazu hatte ich mir erst überlegt alle Eigenschaften (wie Position, Rotaiton...) aller Objekte einer Szene pro Frame zu speichern, und dann einfach ablaufen zu lassen. Mein Problem: das sind viel zu viele Informationen. Eigentlich müßte ich doch auch nur die Veränderungen speichern (a la Keyframes) und zwischen einem Zustand A eines Obejekts und einem Zustand B interpolieren..... Aber wie erhalte ich 1. nur die Veränderungen und 2. wie errechne ich Quasi einen Kurvenverlauf a la Bezier-Kurve. Für etwaige Anregegungen oder Links wäre ich dankbar. Mfg R. |
||
AvaGast |
![]() Antworten mit Zitat |
|
---|---|---|
Hm. Vielleicht könntest Du es auch so machen, dass Du einfach nur alle Kommandos speicherst á la Script?
Also Beispiel: (Pseudo-Script ![]()
Spieler 1 dreht sich 90° Spieler 1 feuert usw Das ist natürlich nicht ganz einfach, so ein Script 'on the flow' zu erstellen, wäre jetzt aber auf die Schnelle meine einzige Idee alternativ zur "alles speichern" Variante. |
||
- Zuletzt bearbeitet von Ava am Di, Apr 06, 2004 0:43, insgesamt 2-mal bearbeitet
![]() |
Vincent |
![]() Antworten mit Zitat ![]() |
---|---|---|
hallo !
ich würd das so machen, das die bewegung des spielers und das schiessen+springen jeweils in einzelnen "scripts" gespeichert werden. beim bewegen-script wir einfach immer jede volle sekunde ein "screenshot" vom spieler gemacht (position/drehung etc ..). dieser wird dann im replay in bewegung umgewandelt. mit dem schiessen würd ich das so regeln, das in einem text alle events wie z.B. schüsse oder springen von spielern steht, und den jeweiligen events immer zeiten in millisec() zugewiesen sind. wenn jetzt die replay-funktion eine bestimmte zeit läuft, dann wird das event ausgeführt (z.B. spieler schiesst). schwierig wirds aber immernoch mit der synchonisation der vorgänge: z.B. der spieler schaut nur schnell (weniger als 1 sec) hinter ner wand vor und schiesst kurz ... da müsste man dann die zeitschritte bei der aufnahme der bewegung verfeinern. damit ein spieler im replay auch noch immer den gegner trifft, den er im richtigen spiel getroffen hat, würde ich in die eventdatei noch reinschreiben, wer/wo/wann getroffen wurde. |
||
Gott ist nicht mit uns ... weil er mit Idioten keine Gnade kennt ! |
Edlothiol |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wenn du keine Zufallszahlen verwendest, könntest du auch einfach die Tastendrücke speichern, das könnte jedoch ein bisschen unsicher sein wegen Float - Fehler etc., ich habs noch nie ausprobiert. | ||
Black |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Quake basiert auf einem strikten Server-Client-Prinzip, d.h. selbst im Multiplayer wird ein lokaler Server gestartet.
Die Demo-Recording Funktion macht nichts anderes als die Netzwerk Messages abzuspeichern (- ich glaube sowohl die, die an den Server geschickt werden als auch jene, die vom Server an den Client geschickt werden). Dadurch läßt sich eine Multiplayer Spiel 1:1 ohne sehr viel mehr Aufwand recorden. cu Black |
||
AvaGast |
![]() Antworten mit Zitat |
|
---|---|---|
Edlothiol hat Folgendes geschrieben: Wenn du keine Zufallszahlen verwendest...
Das ist so nicht ganz richtig: Jede Kette von Zufallszahlen kann rekonstruiert werden! dafür gibt es den SeedRnd() Befehl... fütter den Generator mit der selben Zahl und Du erhälst auch anschliessend die selebe Reihenfolge von Zufallszahlen. |
||
norc |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Was Ana sagt, ist absolut korrekt, die Zufallssequenz kann reproduziert werden, wenn man RNDSEED vor dem Spiel/Replay mit einem fixen Wert setzt.
Wenn es single player ist, kann man eigentlich bloss die User aktionen (Mouse Speed, tasten usw., was eben verwendet wird) aufzuzeichen. Wenn es Multiplayer ist, muss man wie gesagt wurde, die Aktionen aller Player berücksichtigen. Es gibt aber ein anderes Problem beim Abspielen von IO Recordings: Wenn das Spiel mit variabler Framerate arbeitet, bekommt man unweigerlich Probleme. Möglich wäre Realtime Sequencing, d.h. mit jeder Useraktion speichert man auch den Zeitpunkt. Wenn man alle Abläufe des Spiels ebenfalls echtzeit-korrigiert laufen lässt, dann sollten die beiden Dinge koordiniert ablaufen. Allerdings bin ich mir nicht sicher, ob die Zufalls-Sequenz dann immer noch korrekt wiedergegeben wird (?) Echtzeit Sequencing sieht etwa so aus: Code: [AUSKLAPPEN] dim rec(10000,10) dday=millisecs() ; play while game if keydown(200) ; bewege player wie üblich rec(count,0)=millisecs()-dday rec(count,1)=1 ; merke taste count=count+1 endif wend ; replay dday2=millisecs() count2=0 while replay if millisecs()>=(rec(count2,0)+dday2) if rec(count2,1)=1 ; keydown(200) ; bewege player wie üblich endif count2=count2+1 if count2>count then replay_beenden endif wend |
||
r.henson |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Dank an allle. Habe mittlerweile selbst noch dieses Tutorial auf BLITZCODER entdeckt. Geht in die von Euch beschriebene Richtung.
http://www.blitzcoder.com/cgi-...23515.html |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group