Entity im Netzwerk unsichtbar?
Übersicht

![]() |
MercedBetreff: Entity im Netzwerk unsichtbar? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hab da grad ein recht seltsames Problem. Ich bastle gerade am Netzwerk-Modus rum. Das Problem hat nichts mit der Datenübertragung zu tun:
Wenn ich ein Entity lade (als Parentobjekt, also eigentlich eine Gruppe von Meshes lade und an das Parent hänge) und danach das Netzwerk per HostNetGame aktiviere ist alles okay. Wenn ich aber die Reihenfolge umdrehe ist das Entity nicht zu sehen. Vorhanden ist es, weil alle Funktionen die sich auf das Mesh beziehen funktionieren - einschließlcih Camerafunktionen die direkt darauf zeigen. Seltsamerweise tritt das Problem nur bei einem der zwei Rechner auf denen ich es versucht habe auf. Ist das schonmal jemandem passiert? Weiß da jemand abhilfe? |
||
http://www.starship-battles.de.vu
http://www.venture-interactive.de.vu |
![]() |
Merced |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hmm. Hab durch Experimentieren noch einen Weg gefunden es zu umgehen. Ich dachte mir ich poste schnell, was ich rausgefunden habe, falls mal jemand anderes das Problem hat:
Ich lade die Objekte vor dem Netzwerkstart und wenn ich nach dem Netzwerkstart etwas davon brauche kopiere ich es per CopyMesh, statt das Objekt dann zu laden wenn ich es brauche. Vorteile: Der obige Fehler tritt nicht auf. Spiel stockt nie zum laden ![]() Nachteile: Ich muss jedes einzelne Objekt (also auch jedes Schiff) laden, das irgendwann vorkommen KÖNNTE, weil es sonst vielleicht nicht sichtbar wird ![]() |
||
http://www.starship-battles.de.vu
http://www.venture-interactive.de.vu |
![]() |
Shodan |
![]() Antworten mit Zitat ![]() |
---|---|---|
welche version benutzt du?
Also bei meinem Spiel wird erst das Netzwerk gestartet und dann die Objekte geladen. Überprüfe deinen Code. Vielleicht werden deine Objekte nach dem laden vom Remote-Rechner(der jeweils andere Rechner im Netz, der beteiligt ist) beeinflusst, sprich bewegt, so das sie nicht mehr sichtbar sind. Denkbar wäre eine fehlende Übermittlung der Grösse vom anderen Rechner, wodurch die entsprechenden Objekte auf deinem Rechner auf Grösse 0 gestellt würden. (den Bug hatte ich auch schon, hab mich blöde gesucht ![]() Such mal in dieser Richtung |
||
![]() |
Merced |
![]() Antworten mit Zitat ![]() |
---|---|---|
*lach* Das Blödsuchen nach irgendwelchen Fehlern kenn ich nur zu gut. Das isses aber nicht. Das Probelm hat sich eingestellt als ich angefangen habe mit dem Netzwerk zu experimentieren (hab das unter Blitz noch nie gemacht). Ich hab die Netzwerk-Initialisierung gebastelt, damit sie kommunizieren können. Dann hab ich das Schiffe laden hinter die Netzwerkinitialisierung gepackt. Dann hab ich in meinen Option Netzwerk eingestellt, so dass er einen Host aufmacht. Er macht auch wirklich NUR den Host auf ansonsten lief da noch alles wie im Single-Player.
Und schon war keines der Objekte die ich nach dem "ok = HostNetGame(version$)" geladen habe zu sehen. Seltsamerweise NUR auf einem von zwei Rechnern (mit ner Matrox Millenium G200 *gg*) und es betraf NUR die Objekte die zu laden waren. Erstellte (Kugeln, Sprites, usw) oder kopierte Objekte gehen und jetzt wo ich alles "preloade" und wenn ich es brauche kopiere, geht es, bei ansonsten gleichem Code... ist sehr seltsam. Ach ja, Version ist 1.85, wenn mich nicht alles täuscht. Inzwischen funzt es ganz gut und "Starship Battles" macht sogar ganz schön Spaß im Netzwerk - auch wenn es nur die Standardwaffen gibt im Moment ![]() |
||
http://www.starship-battles.de.vu
http://www.venture-interactive.de.vu |
![]() |
Shodan |
![]() Antworten mit Zitat ![]() |
---|---|---|
sieht ja schon ganz gut aus dein Spiel.
Also wenn derselbe Code auf zwei Rechnern unterschiedlich läuft, dann ist es vielleicht ein Blitz-interner Bug. Du solltest dich vielleicht nicht auf diesen Workaround versteifen und auf dem anderen Rechner, auf dem es normal läuft, weitercoden. Eventuell zweigleisig. also einmal mit und einmal ohne Notlösung, falls du nur diese 2 Rechner hast. Sonst schleppst du diesen Workaround, der wahrscheinlich unötig Ram braucht, durch alle Versionen deines Spiels. Irgendwann ist er nicht mehr notwendig und dann kannst die Variante mit Workaround beiseite packen, ohne das komplette Spiel umzuschreiben. Es betrifft ja nur das Laden von Objekten. Mach einfach 2 unterschiedliche Sub-Routinen draus und rufe jeweils nur eine davon auf. Glaub mir, sind Erfahrungs-Werte. |
||
![]() |
Merced |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich weiß, aber das Workaround löst noch ein anderes Problem: Da das Laden immer nen Moment braucht, hält das Spiel eh kurz an, wenn man was lädt, insofern spart mir das Aussetzer im Netzwerk-Spiel und ich hab trotzdem ein dynamisches Joinen, d.h. man kann jederzeit ins Spiel hinein.
Frage: Hast Du eine Ahnung wie andere Programme das verwalten? Werden immer alle Modelle geladen oder werden sie dynamisch im laufenden Spiel geladen, wenn ein Spieler dazukommt, der ein Modell verwendet dass noch nicht im Spiel ist? Ich tippe ja eher auf letzteres, aber wie löse ich dann das Problem mit der Ladezeit? Das Spiel hängt immerhin auf ALLEN Rechnern kurz. |
||
http://www.starship-battles.de.vu
http://www.venture-interactive.de.vu |
![]() |
Shodan |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wie andere das Handhaben weiss ich nicht, aber bei Dogfight wird alles im Vorraus geladen. Der Host lädt für den lokalen Spieler und für die Bots das eingestellte Schiff, das Level und die Objekte für Schüsse und Explosionen. Diese Objekte werden dann unsichtbar gemacht und bei Bedarf eingesetzt. Der Vorteil ist, dass man keine Ruckler im Spiel bekommt, da diese Objekte häufig benutzt werden.Der Nachteil ist, dass ihre Anzahl begrenzt ist. Man muss dann bei der Anzahl abwägen zw. zuviel Speicherverbrauch und zu wenig Objekten.
Wenn ein Client einsteigt wird erstmal ein Standard-Model geladen und wenn der neue Spieler dann die Info schickt, welches Schiff er nutzt, wird das richtige geladen. Hat den Vorteil das bereits ein Schiff da ist, falls der Client ein Schiff-Modell hat, welches der Host nicht hat. Ich glaub Quake3 macht es ähnlich. Der Client ansich lädt, nach dem verbinden, ebenfalls das Level und die Objekte zuerst, erhält dann vom Host die Infos über die anderen Spieler und ihre Schiffe und lädt diese. Dann erst beginnt bei ihm das Spiel. Ist vielleicht nicht die beste Lösung funzt aber prima, bis jetzt. ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group