Zurück   Flashforum > Flash > ActionScript > Spielkonzepte und Spieleprogrammierung

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 29-03-2011, 16:38   #1 (permalink)
Haaajmo Bosno!!!
 
Benutzerbild von mirzahat
 
Registriert seit: Aug 2001
Ort: Bihać
Beiträge: 692
Physik ubertragen?

Hallo,

ich versuche ein Klon von HaxBall zu erstellen (mit p2p).

http://elearn72.net63.net/test.swf

Öffnet die SWF in 2 Fenstern, dann versucht mit Pfeiltasten zu steuern.

DAs Problem ist, dass ich die Physik nicht richtig kopieren kann (ich verwende Box2D).

Ich habe Physik in allen Clients, vielleicht sollte ich Physik nur auf einer Seite
haben?

Gruss,
Mirza
mirzahat ist offline   Mit Zitat antworten
Alt 29-03-2011, 17:09   #2 (permalink)
in the boondocks
 
Benutzerbild von shin10
 
Registriert seit: Feb 2006
Ort: Augsburg
Beiträge: 3.500
Zitat:
Zitat von mirzahat Beitrag anzeigen
Ich habe Physik in allen Clients, vielleicht sollte ich Physik nur auf einer Seite
haben?
dann rauscht dir der andere aber immer durch den ball durch. das allein ist auch nicht das gelbe vom ei.
es sieht allerdings so aus, als würdest du gerade einfach so in gewissen zeitabständen daten austauschen, auch wenn gar nichts passiert. ist das richtig?

wenn ja, dann mach das lieber nur zu bestimmten events. bei keydown und wenn der ball getroffen wird. alles andere ist ja doch uninteressant.

dann solltest du noch versuchen den ping zu ermitteln und timecodes mitschicken um die wahrscheinlichkeit zu erhöhen, die richtige entscheidung zu treffen.

mfg

sx

edit: jetzt hab ich s nochmal probiert ... is ja schlimmer als ich dachte
verschick folgendes:
spieler:
- position
- keyevents
- timecode

ball:
- position
- winkel
- geschwindigkeit
- timecode

du darfst dann aber nicht einfach nur die position setzen, sondern musst eben alles berücksichtigen und die neue position in abhängigkeit der bereits seit dem senden vergangenen zeit (ping) festlegen.

btw. auch beim spieler, bei dem die geschwindigkeit konstant ist, musst du das machen. du kannst hier nicht jedes frame sagen x += 10! denn auf einem anderen rechner läuft die 25 fps swf vielleicht nur mit 23 fps. alles hängt von der zeit ab.

edit2: du kannst sogar noch weitergehen und den ping auf die "eigenen" aktionen draufschlagen und damit die steuerung ein wenig verzögern um die synchronität zu erhöhen.

das sind nur so meine gedanken dazu, aber manchmal denk ich es macht tatsächlich sinn, was ich mir so aus dem hirn pule

Geändert von shin10 (29-03-2011 um 18:00 Uhr)
shin10 ist gerade online   Mit Zitat antworten
Alt 29-03-2011, 18:14   #3 (permalink)
Haaajmo Bosno!!!
 
Benutzerbild von mirzahat
 
Registriert seit: Aug 2001
Ort: Bihać
Beiträge: 692
danke aber:

Zitat:
25 fps swf vielleicht nur mit 23 fps
ist nicht korrekt, denn ich verwende den STEP Event von Box2d, der
frame-unabhängig ist...

das mit dem TimeCode geht mir nicht in den Kopf...kurze erklärung?

Gruss,
Mirza
mirzahat ist offline   Mit Zitat antworten
Alt 29-03-2011, 18:17   #4 (permalink)
Haaajmo Bosno!!!
 
Benutzerbild von mirzahat
 
Registriert seit: Aug 2001
Ort: Bihać
Beiträge: 692
in meinem code habe ich alles was du vorgeschlagen hast,

bis auf den Timecode
mirzahat ist offline   Mit Zitat antworten
Alt 29-03-2011, 18:45   #5 (permalink)
in the boondocks
 
Benutzerbild von shin10
 
Registriert seit: Feb 2006
Ort: Augsburg
Beiträge: 3.500
einfach mal getTimer() abfragen, dann zu spieler2 schicken, der fragt bei sich getTimer() ab und schickt beide zurück.
das machst du ein paar mal sowohl von spieler1 zu spieler2 als auch umgekehrt. du kannst dann ermitteln, wie viel zeit notwendig ist, um die daten von der einen swf zur anderen zu schicken. außerdem kannst du so herausfinden, um wieviel sich getTimer() bei beiden swfs unterscheidet (ich nenn es mal timeLag). der ping kann sich natürlich im laufe der zeit ändern, timeLag ist aber letztendlich fix.

wenn du jetzt eine nachricht von der anderen swf bekommst, weißt du wo was an welcher position war und vor allem wann. seither ist aber natürlich schon zeit verstrichen. du ermittelst also die seither verstrichene zeit unter berücksichtigung von timeLag und damit wiederum wie weit das objekt in der zwischenzeit weitergezogen ist.

vereinfacht könnte das so aussehen:
PHP-Code:
var currentPong:int getTimer() - (data.time timeLag);
obj.data.position.data.vX currentPong
shin10 ist gerade online   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Physik _crypto_ Am Rande 5 18-04-2007 22:34
Physik problem _crypto_ Am Rande 7 23-02-2007 09:50
Polygon - physik ? pixartist Spielkonzepte und Spieleprogrammierung 3 09-12-2006 21:30
Physik - Pendel Earcandy ActionScript 2 5 24-11-2006 15:57
Physik in Flash schmidi Flash MX 3 17-06-2005 18:55


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:23 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele