• Bitte schaltet eure Ad Blocker aus. SLinfo kann nur betrieben werden, wenn es durch Werbung Einnahmen erzielt. Vielen Dank!!
  • Wir freuen uns, wenn du dich in unserem Forum anmeldest. Bitte beachte, dass die Freigabe per Hand durchgeführt wird (Schutz vor Spammer). Damit kann die Freigabe bis zu 24 Stunden dauern.
  • Wir verwenden Cookies, um Inhalte und Anzeigen zu personalisieren, Funktionen für soziale Medien anbieten zu können und die Zugriffe auf unsere Website zu analysieren. Sie geben Einwilligung zu unseren Cookies, wenn Sie unsere Webseite weiterhin nutzen.

Flakkugel auf bestimmter Höhe zur Explosion bringen

HeyHey91

Nutzer
Hallo,

dieses Mal schreibe ich im Auftrag eines Freundes.

Er würde gerne selber eine Flak bauen, die Geschichten mit dem Abschusswinkel hat er schon alles, war ja dank Wikipedia und den Formeln für den Schiefen Wurf nicht schwer.

Jetzt hat er allerdings das Problem, dass er nicht weiß, wie er die Flak Kugel in einer bestimmten Höhe zum Explodieren kriegen soll. Es soll sowas wie eine Flak 88 werden, also größeres Kaliber.

Ich hab ihm vorgeschlagen, dass er die Kugel einfach durch ein Phantom Objekt mit llVolumeDetect fliegen lassen soll, da stellt sich dann allerdings das Problem, wie man das eigentliche Geschoss zum Stillstand bringen soll. 2mal llVolumeDetect(TRUE) funktioniert ja blöderweiße nicht. :-(

Über die Flugzeit lässt sichs in Secondlife ja auch schlecht machen, da es ziemlich ungenau ist, vor allem bei Gechwindigkeiten jenseits von 50m/s

Habt ihr Ideen, wie man so etwas lagschonend programmieren könnte?

lg HeyHey und Luxor
 
Ich würde das erstmal so machen:

Das Flakgeschütz hat eine bestimmte Höhe auf der Sim.
Das Geschoss hat eine bestimmte Rechweite.
Zerstören muss es sich also bei Flakgeschützhöhe + Reichweite.

Als Beispiel:
Das Geschütz ist auf Position <egal.egal.1>
Das Geschoss hat eine Rechweite von 10 Meter.
Also zerstört sich das Geschoss bei <egal,egal,11>

Der Befehl dafür wäre eigentlich llGetPos() in einem Timer event im Geschoss.
Die Höhe des Geschützes müsste an das Geschoss übertragen werden.
Entweder per listener nach dem Abschuss oder im Geschoss skript festlegen.
 
des wäre ja nicht das Problem, das Problem ist das Geschoss zu stoppen.

Wir können ja nicht alle 0,05 sekunden nen Timer laufen lassen um die Höhe zu überprüfen. Die Geschosse fliegen mit 50 bis 200m/s

Wenn wir das Geschoss durch ein Phantom Objekt fliegen lassen, wird ja auch nur im getroffenen Objekt ein Kollisionsevent ausgelöst und das Geschoss fliegt munter weiter.

Unsere Versuche mit llVolumeDetect(TRUE) in beiden Objekten bringen bisher auch nichts.
Wir können ja auch keine Objekte die nicht phantom sind in der Luft platzieren, zu groß ist die Gefahr, dass ein Flieger da reinknallt.

Sensoren sind sicherlich auch zu langsam?


Habt ihr noch Ideen, es sollte halt lagschonend sein
 
Das einfachste ist es vermutlich, wenn du das wirklich über die Flugzeit machst.
D.h. beim Abschuss wird ein Timer eingestellt, der dann irgendwann die Detonation auslöst.

Das ist schon ein bisschen ungenau, da die FPS des Servers oft ein wenig schwanken.
Aber genau diese Schwankungen kannst du vor dem Stellen des Timers abfragen mit llGetRegionTimeDilation(). Dabei bedeutet eine TimeDilation von 1.0, dass der Server mit voller Geschwindigkeit läuft, während eine Dilation von 0.5 bedeutet, dass alles deutlich langsamer läuft. Entsprechend musst du eben deinen Timer bisschen velängern.
Ob das ein linearer Faktor ist weiß ich nicht, aber das lässt sich herausfinden.


Um ein Geschoss vor der Detonation zu stoppen könntest du es einfach non physical machen und auf eine bestimmte position setzen, die du dir grade mit llGetPos() geholt hast.
 
genau des hab ich vorhin ausprobiert, die Explosionshöhen schwanken bei etwa 30m/s am Ziel schon bei -10 bis 10 Meter, bei 80m/s am Ziel sinds gleich mal -20 bis +20 Meter, bei 160m/s am Ziel warens schon über 60 Meter Unterschied. Die Sim wurde ziemlich belastet, wies halt im Kampf auch üblich ist.

Die TimeDilation war natürlich im Timer eingerechnet,


Gibts denn keine Möglichkeit das Geschoss eine Kollision durch ein Phantom Objekt erkennen zu lassen?

Des muss doch irgendwie mit llVolumeDetect machbar sein?
 
Hallo,

mal so von hinten übers Knie durch die Brust ind Auge :

Jetzt hat er allerdings das Problem, dass er nicht weiß, wie er die Flak Kugel in einer bestimmten Höhe zum Explodieren kriegen soll. Es soll sowas wie eine Flak 88 werden, also größeres Kaliber.
Es soll doch ein "realistischer" Nachbau werden ?

wenn Nein : Meinen Beitrag einfach ignorieren.:-D

Wenn Ja - dann ist folgendes evtl hilfreich :

Das Geschoss besaß gegen die stabilen B-17 einen effektiven Wirkungsradius von etwa zehn Metern oder weniger. Die Flugzeiten der Geschosse betrugen je nach Höhe 20 bis 40 Sekunden. Die Messgenauigkeit der Radargeräte lag grob bei ±100 Metern, wenn sie nicht gestört wurden. Dies führte dazu, dass mehrere tausend Granaten für den Abschuss eines Bombers nötig waren, was einen enormen Ressourcenverbrauch bedeutete.


Bis kurz vor Kriegsende hatten die Geschosse nur Zeitzünder. Es kam oft vor, dass eine Granate ein Flugzeug durchschlug und erst später explodierte. Durch Einführung von zusätzlichen Aufschlagzündern (Doppelzündern), die trotz Anforderung erst 1945 stattfand, konnte deshalb die Abschussrate etwa verdreifacht werden.
Quelle :
8,8-cm-FlaK 18/36/37

Ist nur mal so ein Gedankeneinwurf.

Wäre mit Timer und Collision einfach zu lösen.
LG
Tom
 
ja, da waren wir wohl echt zu sehr im Genauigkeitswahn, die Artillerie funktioniert so schön :D

wär halt trotzdem schön, wenn mans auf 10 Meter eingrenzen könnte. ich glaub, wir müssen einfach die Geschwindigkeit auf 30m/s beim Ziel berechnen

wie würdet ihr dann die Flugzeit übertragen?

llGetStartParameter() ?
 
auf die Idee bin ich noch garnet gekommen, wie siehts denn mit dem Lag und Speed von llTarget und Konsorten aus?

nach meinen Erfahrungen war die Funkition eher langsam, kann aber an der Sim und dem fehlenden Mono gelegen haben?
 
Target is schon ein guter Tip, und zusätzlich Collision, falls doch mal was direkt getroffen wird ;)

Ist auch immer ne Frage wie die Flak gesteuert wird.
Ich hab ne Balista, die wird im Mouselook gesteuert, da übergeb ich dann ggf. Zielkoordinaten mit dem Rez-Integer, sowa muss man nur vorher berechnen ;)
 
unsere Kanone kann per Tastatur, Mouselook oder per Koordinanteneingabe gesteuert werden, die Berechnung ist kein Problem, alles schon gemacht.

ich kann mich nicht entscheiden: llTarget oder Zeit?
 
ich würede beides nehmen :twisted:

Target ist prima - aber es sollte schon eine Zeitbegrenzung drinn sein ( wg Simüberschreitung oder so :D )

/me hofft mal auf ne DemoVersion
 
die wirds villeicht geben^^, ein youtube Video auf alle Fälle.


Paah ist das kompliziert, die Artillerie ging ja noch ganz einfach mit dem schiefen Wurf, aber bei der Flak heißts echt rechnen, rechnen, rechnen xD
 
also das es nicht genau ist und in verschiedenen Höhen detoniert ist doch klasse

dadurch wirkt es viel echter als wenn du da ne grade fläche hinballerst.....

so explodiert es mal hier mal da .... wie in echt....
 
eben, deshalb mach ichs auch so

des is aber auch ein Kreuz, im Augenblick funktonierts da die Sim kaum belastet wird, nahezu perfekt, bei 60m/s am Ziel nur noch 2 Meter Streuung, bei belastung der Sim sinds gleich mal 60 Meter Unterschied, des muss ich irgendwie noch in den Griff kriegen ohne noch für weiteres laggen zu sorgen.
 
ein kleines Bild von den kleinen Explosionen am Himmel, die werden wir natürlich noch etwas schicker machen

Die Geschosse haben 2000 Höhenmeter zurückgelegt, das einzige was mir etwas sorgen macht sind bei so langen Flugzeiten die zwischenzeitlichen Laggs. Aus irgendeinem Grund wirken sich die beim Phoenix Viewer auf die eigentliche Flugbahn,beim SL Viewer 2 lustiger weiße nicht, beziehungsweiße sehr sehr gering. Beim Phoenix Viewer kommts zu seltsammen Sprüngen, beim SL Viewer haben wir das bisher nicht beobachtet.

show_img.php
 
Das Problem dürfte wohl der Netzwerkcode von SL sein, der ist bisschen anders gestrickt als z.B. bei einem Shooter wie CS oder sowas.

Bei letzteren macht der Server so ziemlich alles an Bewegung und sonstiger Dynamik und sendet ständig kurze Positionsmeldungen an den Client, der dann eben daraus die Bewegung der Spieler darstellt. D.h. die kompletten Berechnungen finden alle auf dem Server statt. Dabei werden Kollisionen auch teilweise vom Client verwaltet. Aber der Netzwerkcode ist darauf ausgelegt alles möglichst in Echtzeit und möglichst exakt darzustellen. Der Metacontent (Daten über die Map, die Models usw.) wird dabei nicht über das Netz verteilt, das wird alles lokal installiert und dann direkt von der Festplatte geladen.
D.h. normalerweise wird nur die reine Bewegung übertragen, sonst nichts.


Bei SL kriegt der Client (der Viewer) vom Server die Physikdaten und die Geschwindigkeiten und so ewas, mit denen der Client dann die Flugbahnen und die Bewegungen darstellen kann. D.h. er berechnet die Bahnen mit einer einfachen Physik selbst. Dabei schickt der Server aber nur dann Daten, wenn da irgendwas aktualisiert wurde, und eben nicht ständig. D.h. die Flugbahnen werden ja nach Viewereinstellung und Lag usw. ein wenig unpräziser. Dafür kann dabei aber auch noch "user generated content" übertragen werden.

Damit kann man in SL zwar mehr machen als bei einem Shooter - aber das ganze ist dafür deutlich ungenauer. Und das ist nebenbei auch der Grund, warum SL als Shooter nicht so wirklich gut geeignet ist. Bzw. nicht mit einem PC-Spiel verglichen werden kann.
 
weils mir gerade auffällt, was ist denn die maximale Abschussgeschwindigkeit eines Objektes in SL?

Ich dachte die lag mal bei 250m/s, ich hab jetzt aber mal mit einem Geschoss nachgemessen, es wird maximal nur mit 202.8m/s abgefeuert und fällt auch nicht schneller

mit dem SL Viewer 2 keinen Unterschied


war das schon immer so, wird das noch geändert?
 
200m/s könnte sein. Ich hatte mal vor Monaten versucht, den Avatar zu warpen, ein Attachment kann das nur via llMoveToTarget tun. Ich hatte 150m/s gemessen, das war schon nahe des maximum das ich erreichen konnte. Mehr wollte ich nicht ausreizen (Lag).

Allerdings kann man das Objekt nicht physikalisch machen und via llSetPrimitiveParams([PRIM_POSITION, pos]); verschieben. Man kann die Funktion 5mal pro Sekunde aufrufen und pro Schritt maximal 10m, also naiv gelöst kann man maximal 50m/s ereichen.

Es gibt aber einen Trick, man berechnet vorher und übergibt eine Liste mit lauter Positionen, also [PRIM_POSITION, pos1, PRIM_POSITION, pos2,..., PRIM_POSITION, posN]. Auf die Weise kann man Kilometerweit mit nur einem Funktionsaufruf springen.

Vielleicht wäre so das Problem zu lösen, die Positionen werden auf einer parabolischen Flugbahn liegen (jeden Punkt vorher berechnen), die exact zur Explosionsstelle führt. Braucht etwas Mathe, dafür aber weder Kollision noch Timer.
 
Das Ausrechnen wäre kein Problem, die Formeln sind ja eh schon im Einsatz, ich schieß ja im Augenblick sowieso auf Parabelflugbahnen. Ich wollte halt das Geschütz so real wie nur irgendwie möglich bauen, deshalb isses eher ungünstig das Objekt zu verschieben.
2000 Meter sind aber doch etwas wenig, mit 250m/s wär ich auf über 3000 Meter gekommen.
Wenn ich der Kugel einen Treibsatz verpasse würde, der das Geschoss auf 200m/s 5 sekunden hält, könnte ich die 3000 erreichen, es würde allerdings auch etwas merkwürdig aussehen.
Eine zusätzliche Abschlussplattform in 1500 Meter Höhe würde auch seltsam aussehen.

Ach des is alles ein Kreuz
 

Users who are viewing this thread

Zurück
Oben Unten