Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

13.06.2013, 16:38

Flugzeug umkreisen lassen

Hallo,

ich hab eine Idee, aber weiß nicht wie ich es umsetzen kann. Ich habe ein Flugzeug. Es bekommt ein Ziel zugewiesen und soll es umkreisen. So quasi als Drohne.

Ich kriege es mit Schnick Schnack hin, aber ist nicht so wie ich es wollte. Erst habe ich einfach Cosinus und Sinus benutzt, aber das ist es nicht was ich möchte.
Wenn ich Cosinus und Sinus benutze muss ich die Richtung (sprich: cos(WERT)) selbst bestimmen (oder gibst da ne andere Lösung?^^) und außerdem benutze ich applyforce. Das heißt, wenn das Flugzeug mal zu schnell ist wird es gebremst und zurück bewegt.
Also hab mal etwas gezeichnet damit man das versteht.


(Link)
Nichts ist unmöglich.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

13.06.2013, 16:45

Wofür solltest Du da Forces verwenden? Sollen wir jetzt übrigens raten, welche Engine Du benutzt?
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

3

13.06.2013, 17:04

Ich benutze überhaupt kein Engine. Es wird mit Expression2 programmiert und in Echtzeit in einem 3D-Spiel ausgeführt. Quasi man programmiert innerhalb eines Spiels ( Multiplayer ). Da kann man halt Dinge gleich Visual darstellen. E2 ist von Syntax her wie C++, C, C#. Aber keine Klassen usw.
Wenn man das so betrachtet ist es eigentlich Sourceengine :)

Mit ApplyForce bewege ich das Flugzeug in die gezeigte Richtung. Sprich es "schwebt" dahin.

Wieso ist denn hierbei die Engine wichtig?
Nichts ist unmöglich.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

13.06.2013, 18:02

Weil "ApplyForce" klingt als würdest Du irgendeine Physik- oder Game-Engine benutzen. Wenn nicht, kann "ApplyForce" ohnehin alles mögliche tun, was wir nicht wissen. Und da ist dann noch die Frage, wie wir Dir helfen sollen, wenn wir die verwendete Engine nicht kennen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

5

13.06.2013, 18:20

Du musst ein wenig genauer werden. Was passiert bei dir und wie gehst du selbst vor? Was du möchtest haben wir glaube ich verstanden nur was funktioniert nicht? Normal würde ich bei sowas vermutlich einfach mit Matrizen arbeiten. Damit hat man die Transformation recht schnell gebaut. Mit Kräften ist das natürlich wieder ne andere Sache. Da würd ichs vermutlich mal mit Steering Behaviours versuchen. Wenn man sich davon mal ein paar implementiert hat und die dann ein- und ausschalten kann, hat man sowas schnell umgesetzt. Vielleicht einfach mal googlen. Oder du malst dir das ganze auf, nimmst dir ein Physikbuch und rechnest ein bisschen rum bis du eine Lösung hast.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

birdfreeyahoo

Alter Hase

Beiträge: 756

Wohnort: Schorndorf

Beruf: Junior Software Engineer

  • Private Nachricht senden

6

14.06.2013, 18:05

Ich bin grad ein wenig ausgelaugt durch meine Deutscharbeit eben, aber wenn ich an PHysik und Kreis denke, fällt mir Zentriepetalkraft ein.
Sprich: applyForce nachvorne und Zentriepetalkraft nach Position des Objektes nach oben auf Höhe der Kreisbahn verschoben.

7

15.06.2013, 21:50

Meinst du Garrys Mod und die Wire Expression2 Extensions? Falls ja, gibt es bezüglich Garrys Mod allgemein und Wire (sowie Expression2) unzählige Tutorials und Videos.
Hier einige Beispiele: http://maurits.tv/data/garrysmod/wiki/wi…/index3edb.html

Als Grundlagen könnten dir diese Beispiele dienen:
http://maurits.tv/data/garrysmod/wiki/wi…28by_Chinoto.29

http://maurits.tv/data/garrysmod/wiki/wi…28by_chinoto.29


Allgemein findet man bei Youtube diesbezüglich ebenfalls so ziemlich alles in Form von Tutorials.

8

24.06.2013, 13:34

Hey, sorry hatte kaum Zeit um zu antworten :D. Sorry für die mangelnde Beschreibung. Ich versuche präziser zu sein.

Zu Applyforce: Ich habe da eine eigene Funktion geschrieben, die einfach nur die aktuelle Position mit den Richtungsvektor addiert. Physikalisch wird nichts beeinflusst und selbst hat das Objekt auch nichts physkalisches (keine Masse, Kollision oder sonst was). Gravitation usw. brauch ich auch nicht :) Letztendlich dient mir die ApplyForce-Funktion dafür, um etwas von a nach b zu bewegen.

Was ich bis jetzt gemacht habe ist, dass das fliegende Objekt seinen Ziel umkreist. Dazu habe ich das hier getan:

Quellcode

1
2
CosSinCounter = CosSinCounter + 1
CirclePos = Ent:pos() + vec(cos(CosSinCounter)*Dist, sin(CosSinCounter)*Dist, Heigh )


Wenn man jetzt die Grafik was ich im ersten Post habe anschaut, sind es die Pfeile, die den Panzer umkreisen.
So nun die Probleme sind diese hier:
1. Da ich CosSinCounter benutze kann ich die Geschwindigkeit des Flugobjekts nicht anpassen, es sei denn ich mache CosSinCounter + 2 aber finde das ist blödsinn :thinking:.
2. Wenn das Flugobjekt von außen in den Orbit reinfliegt, dann müsste ich quasi den Startwert von CosSinCounter wissen. Ich weiß nur nicht wie ich das lösen könnte.
Beispiel: Wenn das Objekt von rechts kommt (wie auf dem Grafik) könnte ja sein, dass der CosSinCounter = 0 auf der Linkenseite vom Zielobjekt ist.
Das heißt nachdem er Orbit errecht hat mit sagen wir mal if(ObjektDistZumZiel < Dist) { Orbitfunktion ausführen }, dann wird das Flugobjekt falsch positioinert.

@birdfreeyahoo
Ich habe es grob überflogen, aber das sieht bissel danach, dass es mir helfen könnte.

@Thurien
Ja richtig. Ich habe kein Problem mit Expression2. Ich kenne die Grundlagen und habe jede Menge Dinge damit programmiert. Hier hab ich nur ein bissel rein logisches/mathematisches Problem :rolleyes:.

Aber jetzt ist mir spontan eingefallen, dass ich doch hier für CosSinCounter den Winkel ausrechnen müsste wohin genau das Flugobjekt hinschaut (relative zu Zielobjekt natürlich) oder? Dann müsste ich ja quasi wissen wo die Position im Orbit sein müsste. Ich hoffe ich liege richtig ^^

EDIT: Ich habe eine Lösung gefunden. Danke für eure Hilfe.
Hier mal abgemagerte Code, wie ich mit Hilfe und Ideen von euch und meinerseits erreicht habe.
Ich hab es auch bissel kommentiert, damit der oder die Jenige versteht was da passiert.

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
        #Target größe erkennen. x = length, y= width, z = height
        Height = TargetEnt:boxMax():z()

        #Radius erkennen, x = length, y= width, z = height
        Radius = TargetEnt:boxSize():y()*10
        
        #HEnt ist Jetobjekt, TargetEnt ist Zielobjekt
        #Richtungsvektor berechnen
        Direction = (HEnt:pos() - TargetEnt:pos())

        #Das zu einem Winkel umrechnen (pitch, yaw, roll)
        # wir brauchen später yaw
        DirectionAng = Direction:toAngle() 
        
        #Winkel yaw zum target
        WinkelZumTarget = DirectionAng:yaw()
        
        #Winkel wird berechnet und 5 addiert wird, wird auch Punkt verschoben und der Jet dreht sich wieder und dadurch wird wiederum Richtung und Winkel neu berechnet somit verschiebt es sich jedes mal :)
        OrbitPos = TargetEnt:pos() + vec(cos(WinkelZumTarget + 5)*Radius, sin(WinkelZumTarget + 5)*Radius, Height)

        ...
        applyforce und richtung setzen usw.


Von daher kann es geschlossen werden, da es gelöst ist :)
Nichts ist unmöglich.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »MaZy« (24.06.2013, 16:54)


Werbeanzeige