extrem physics variablen

  • GM 8

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

  • extrem physics variablen

    Ich hoffe es gibthier jemand der sich etwas mit der extrme physics dll/extention auskennt.
    Ich stehe nähmlich gerade vor einem für mich unlösbaren problem.
    Und zwar verwende ich in meinem 2d multiplayer sidescroller extremphysics um objekte realstisch zu berechnen das geht auch ohne problem und bei allen spielern synchron da bei allen ja die kräfte gleich berechnet werden. wenn jetzt aber ein spieler einem vorhanden spiel beitritt und hier bereits gespielt wurde so muss ja erst der neue spieler die slebe welt bekommen also die positionen aller objekte die sich inzwischen geändert bzw zerstört wurden übermittelt bekommen. das geht mit normalen objekten auch ganz gut doch jetzt kommt extreme physics in's spiel .Denn diese benutzt ja nicht die normalen speed , direction variablen sondern eigene (unter andrem velocity center) und auch die positon des shapes/body muss ja übermittelt werden. Und wäre das nicht genug gibt es ja noch die möglichkeit dass das objekt /z.b eine kiste gedreht ist oder sich gerade dreht )
    es gibt also viele verschiedene sachen zu übermtteln doch das problem ist ich weiß nicht in welchen variablen die werte gespeichert werden. Meine Frage ist also falls es hier jemanden geben sollte der mir helfen kann welche wete muss der server an den neu beitretenden client übermitteln damit bei diesem ein objekt welches der physic von extrem physic unterworfen war / gerade ist genau beim andren synchron ist .
    Das ist jetzt schwer auszudrücken aber ich hoffe jemand kann mir helfen.
    :rage:
  • Zu erst musst du dir auf der Client-Seite eine neue Welt erstellen.
    Dann speicherst du deine Bodies in einer ds_list auf dem Server ab und, wenn ein Spieler joint, dann müssen die Bodies auf dem Server beim Client erstellt werden. Also im Prinzip eine Kopie von jedem Body vom Server beim Spieler erstellen.
    Oder du holst dir mit ep_world_first_body(global.world) den ersten Body vom Server und gehst dann per for-Schleife die anderen Körper vom Server durch und erstellst wiederum eine Kopie der Welt auf der Spieler-Seite. Sowas in der Art:

    GML-Quellcode

    1. for(i = ep_world_first_body(global.world); i < ep_world_body_count(global.world); i+=1)
    2. /*Erstelle die Kopien der Bodies hier, wobei i immer die body_id des zu kopierenden Körpers ist.*/

    Und das Problem ist nicht wirklich ExtremePhysics spezifisch. Das Problem hast du auch, wenn du normale GM-Objekte im Raum hast mit dem Unterschied, dass die Funktionen verschieden sind.

    MfG

    Albert Einstein schrieb:

    Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.
  • naja genau das ist ja nicht das unbedingte problem es geht mir vor allem um die aktuelle einwirkung auf eben jenen body .
    Hier mal ein Beispiel:
    in dem moment wo der neue spieler beitritt fliegt eine kiste gerade durch den raum weil es kurz davor eine explosion neben ihr gab.
    übermittle ich jetzt nur die koordinaten des objekts und des bodys so wird beim neuen spieler zwar die kiste an der richtigen stelle
    erstellt, fällt allerdings runter während sie beim andren weiterfliegt.



    edit zumindest stelle ich mir das so vor da ich es bis jetzt nich nicht geteste hab ;)
    :rage:
  • GML-Quellcode

    1. ep_body_set_velocity_center(...);

    Guck doch einfach mal was du alles an einem Körper manipulieren kannst nachdem du ihn erstellt hast.

    Albert Einstein schrieb:

    Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.
  • Naja genau das ist mei proble ich weiß wie man velocy_center und shape position setzt
    nähmlich mit
    ep_body_set_velocity_center(world_id, body_id, xvel, yvel, rotvel)
    und ep_shape_create_box(world_id, body_id, w, h, x, y, rot, density)
    bzw. ep_shape_create_box(world_id, body_id, w, h, x, y, rot, density)

    aber wie frage ich die einzelnen variablen ab also wie kann ich bzw das aktuelle velocity center speichern damit ich es dann beim client wieder setzen kann.


    ich habe zum test ml nur x,y,direction(ist anscheinend immer 0),speed (auch immer 0) , und image angel gespeichert und wieder ausglesen da erstellt er zwar an der richtigen stelle jedoch ohne rotation oder bewegung
    :rage:

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von meav33 ()

  • ach dafür sind diese funktionen ich dachte die wären nr für den body
    hey Danke funktioniert perfekt.
    Weißt du zufällig auch wie man die stärke der gerade einwirkenden kraft messen kann



    edit: ach zu früh gefreut es ist doch nicht gleich nur ähnlich die rotation stimmt und die geschwindigkeit auch aber sie fallen nicht gleich ich teste das im moment einfach indem ich ein objekt runterfalle lasse und dabei eienr explosion in der nähe aussetze weodurch dieses dann eben durch die luft geschleudert wird dann lasse ich auf tastendruck eie zweites objekt 64 pixel weiter rechts erstelle und gebe dem die slebe xvel yvel und rotation mein code ist

    GML-Quellcode

    1. i= instance_create(x +64,y,door_wood_ph)
    2. i.xv = ep_body_get_xvel_center(global.world,body)
    3. i.xy = ep_body_get_yvel_center(global.world,body)
    4. i.rot = ep_body_get_rotvel(global.world,body)
    5. with i
    6. {
    7. ep_shape_create_box(global.world, body, 14, 32, x, y,rot,1)
    8. ep_body_set_velocity_center(global.world, body,xv,xy,rot)
    9. }



    was fehlt noch damit beide objekt sich dann genau synchron verhalten?


    hab hier zur verdeutlichung mal n video (flashplayer vorausgesetzt)
    dl.dropbox.com/u/36208802/mp%2…07-07%2017-36-52-93_1.swf
    :rage:

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von meav33 ()

  • Das ist schon alles richtig, nur du hast anstatt den aktuellen Winkel die Drehgeschwindigkeit als Winkel gesetzt.
    Du musst dir noch den aktuellen Winkel mit

    GML-Quellcode

    1. i.angle = ep_body_get_rot(world,body);
    holen und dann beim Erstellen der Box den richtigen Winkel setzen.

    GML-Quellcode

    1. ep_shape_create_box(global.world, body, 14, 32, x, y,angle,1)

    Das Setzen der Velocity kannst du so lassen.
    Dann sollten beide Bodies gleich fallen bzw. sich bewegen.

    Albert Einstein schrieb:

    Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.
  • nun das würde das problem auch nicht lösen da die clients ja etwas andres audführen würden als der server berechnet hat . Desweiteren wäre das sehr schwer für mich einzubauen da momentan der server keinerlei einfluss auf die berechnung hat sondern nur signale weiterleitet. Ich müsstr also auch für diese möglichkeit erst alle variablen finden welche den zustand bei xtreme phsics angeben aber irgendeine muss mir noch fehlen :S
    :rage:
  • Lass es einfach so. Auch bei berühmten oder kommerziellen Spielen liegen die Körper auf jedem Client anders. Spiel mal mit irgendjemandem Counter Strike Source oder ein anderes Spiel mit einer Physik-Engine über LAN und vergleich mal dann die Körper bei dir und deinem Kumpel. Eure Körper werden auch nicht zu 100% gleich liegen.
    Ansonsten setz einfach alles was mit ep_body_set_... anfängt (local_point und uservar ausgenommen). Mehr kannst du da auch nicht machen. Ist halt ne Physik-Engine, die sehr realistisch ist. Im wahren Leben fliegen zwei Steine auch nicht 100% gleich.

    Albert Einstein schrieb:

    Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.
  • Ich glaub ich hab das problem gefunden eigentlich ist es ganz einfach nähmlich dass das das neu erstellte objekt zwar die werte bekommt diese jedoch nciht mehr ändert während das originale objekt seine wete noch ändert sind diese beim klon fest.
    Das ganze entsteht dadurch dass die ep_body_set... Befehle den wert für immer festsetzen . Jetzt müsste ich nur wissen
    wie ich die aktive berechnung wieder anschalten kann
    :rage:
  • Tice schrieb:

    Dann muss er wohl alles im Server berechnen und die Position + angle vom jeweiligen physikalischen Objekt versenden.
    Äh ja, das war schon von Anfang an klar.

    meav33 schrieb:

    Das ganze entsteht dadurch dass die ep_body_set... Befehle den wert für immer festsetzen .
    Und wieso dreht sich dann dein Box in der Luft weiter?

    Ich werde, wenn ich Zeit hab, mich damit mal genauer auseinander setzen. Das kann doch wohl nicht so schwer bei ExtremePhysics sein. Wahrscheinlich hast du beim Erstellen des Körpers oder der Shape etwas vergessen bzw. nicht gesetzt, was man normalerweise auch nicht setzen braucht.

    Albert Einstein schrieb:

    Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.
  • Trixt0r schrieb:

    Und wieso dreht sich dann dein Box in der Luft weiter?

    Ich werde, wenn ich Zeit hab, mich damit mal genauer auseinander setzen. Das kann doch wohl nicht so schwer bei ExtremePhysics sein. Wahrscheinlich hast du beim Erstellen des Körpers oder der Shape etwas vergessen bzw. nicht gesetzt, was man normalerweise auch nicht setzen braucht.


    das weiterdrehen kommt daher dass die velocity ja fest ist das heißt er dret sich immer mit der selben geschwindgkeit während das andre langsam abbremst . Ich hab das ganze getestet indem ich mir alle werte anzeigen lassen hab
    ich häng gleich noch mal n video wo mans sieht an.





    edit so hier

    dl.dropbox.com/u/36208802/mp%202012-07-11%2021-28-17-35.swf






    ps. weiß eig'lich jemand wie man hier videos direkt einfügt?
    :rage:

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von meav33 ()

  • Dann probier es mal mit ep_body_apply_impulse oder ep_body_apply_impulse_relative.
    Für die Argumente localx/y bzw. relativex/y müsstest du dann ep_body_get_xvel_local_point und ep_body_get_yvel_local_point vom originalen Körper nehmen oder einfach die Mitte des Körpers. Ich hab mit der Funktion noch nicht gearbeitet, aber spiel mal damit ein wenig rum.

    Albert Einstein schrieb:

    Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.
  • hm laut beschrreibung werden diese funktionen dazu benutzt um einen eigenen impuls auf den körper zu wirken aber das scheint ja nicht die richtige funktion zu sein ich werds aber trotzdem mal testen.



    Das eigentliche problem liegt ja darin das kraft auf einen körper wirkt so wird dessen velocity geändert. diese geht aber langsam wieder auf null zurück. wenn ich diese velocity nun auf ein neues objekt übertrage so behält es dies und ändert sie nur wenn es weder kraft einwirkung erfährt . die einzige möglichkeit ist wie mir schein in jedem stepp die werte neu zu übertragen was aber bei vielen objekten die bandbreite sprengen dürfte
    :rage:

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von meav33 ()