Raumschiff in die Richtung fliegen in die es schaut ?

Status
Nicht offen für weitere Antworten.

KISS

Bekanntes Mitglied
benutze einen gerichteten vector und setze die postion location+=vector ueber einen timertask. da kannst du dann auch gleich beschleunigung usw mit einbauen

edit:
code sollte dokumentiert werden und default package zu nutzen wird mit vba nicht unter 100 zeilen geahndet
 
B

Beni

Gast
[OT]Was ist vba?[/OT]

KISS möchte, dass du deine Klassen in ein eigenes Package wirfst.

Also, dass deine Java-Dateien z.B. in einem Ordner "spacewar" sind, und dass in jeder am Anfang steht
Code:
package spacewar;

import java.awt.*;

public class Blupp{...}

Du kannst mehrere Packages verwenden, und das Ganze wird übersichtlicher (spätestens ab der 20ten Klasse wirst du froh sein, Packages zu haben).
Ausserdem ist die Gefahr von Klassen mit gleichem Namen (und entsprechenden Exceptions...) kleiner, wenn du Packages verwendest.
 

KISS

Bekanntes Mitglied
man benutzt das default package nicht (also keine packageangaben), da man ganz schnell uneindeutige klassennamen hat. normalerweise wird die form <tld>.<organisation>.<funtion>.<subfiunction>[.diversifaction][.implementation].<name> genutzt
also z.b

de.kiss.uilayer.renderer.Renderer fuer ein renderer interface
und de.kiss.uilayer.renderer.impl.DefaultRenderer fuer die implementierung

wenn du keine 100 zeilen vba schreiben willst darfst du wahlweise auch quicksort in prolog implementieren
 

raven

Bekanntes Mitglied
Aha. :wink:

Und wozu soll ich einen Verktor nehmen, geht doch genauso mit einem Array oder? oder soll der Vektor erweitert werden?
 

KISS

Bekanntes Mitglied
sorry, ich meinte vector im mathematischen sinne. da du dich nur im 2d raum bewegst bietet sich hier die klasse point (bzw Point2D) an
 

raven

Bekanntes Mitglied
Was ich trotzdem nicht versteh ist. Ich drehe das Raumschiff ja, na eigentlich die zeichenfläche.

Also wenn die Zeichenflächer um ca. 30° nach rechts gedreht wurde. dann müsste das Raumschiff ja auch in die Richtung fliegen.

Vorhin hatte ich das ja mal hinbekommen, bloß musste ich das wegmachen, weil das drehen des Raumschiffes nicht so hingehauen hatte.

Das hatte ich glaub ich so gemacht. g2D.rotate(Math.PI/theta);

Und da ging das ohne Point2D. :bahnhof: :bahnhof: :bahnhof:
 

KISS

Bekanntes Mitglied
nun ja, ich gehe mal von echter physik eines objekts in der schwerelosigkeit aus

1. das objekt hat zu einem festgelegtem zeitpunkt t0 eine position p0, sei p0 ein vektor (x,y,z)
2. das objekt hat zu jedem beliebigen zeitpunkt t einene impuls p, sei p ein vektor (x,y,z)
3. da wir keine schwerkraft haben, ist pn am zeitpunkt tn immer p0+n*p
4. die rotation wirkt sich auf den impuls nicht aus
5. wenn ich den impuls aendere (der vektor sei hier s), gilt pn=p0+(n-1)*p+s
6. s ist abhaengig von der lage und richtung im raum und gibt als betrag die beschleunigung an

da du das ganze nur 2 dimensional betrachtest reicht ein vektor x,y, und den bildet point schon ab

edit:
zu 2: der betrag des vektors ist damit aequivalent zu geschwindigkeit, nicht zur beschleunigung

edit2:
zu 6: ist natuerlich quatsch, die aenderung des impulses ist nur von der richtung, nicht von der lage abheangig
 
B

Beni

Gast
Du drehst das Bild des Raumschiffes, nicht das Raumschiff selbst. Die Position des Raumschiffes wird immer im Koordinatensystem des Frames berechnet (also x = horizontal zum Bildschirm, y = vertikal).

Du kannst die Rechnungen schlecht in das gedrehte Koordinatensystem verlagern (du kannst, aber es wird garantiert komplizierter als jede andere Lösung).

Wenn du aber den Winkel hast, um den die Nase "nach oben" zeigt, kannst du ein Zahlenpaar x/y (=ein Vektor) berechnen, für welches gilt: legst du eine Gerade durch den Punkt 0/0 und durch x/y, so ist diese Gerade parallel zur Blickrichtung deines Raumschiffes.
Diesen Vektor x/y kannst du der *Position deines Raumschiffes hinzuzählen, und dann bewegt es sich in die Blickrichtung.

x und y sind: x = cos alpha, y = sin alpha; wobei alpha der Neigungswinkel des Raumschiffes ist (vielleicht fehlt da noch irgendwo ein "-").

Weil es unpraktisch ist, immer zwei Zahlen hin und her zu schieben, empfahl dir KISS einen Point2D zu benutzen. Damit hast du ein Objekt, und bringst garantiert nix durcheinander.

[Edit]
Ich bin zu langsam...

* oder nach KISS: du zählst diesen Vektor dem Geschwindigkeitsvektor hinzu, und der Geschwindigkeitsvektor der Position. Damit erhälst du ein realistischeres Verhalten.
 

raven

Bekanntes Mitglied
Ja jetzt leuchtet es auf. Nur hab ich keinen blassen Schimmer wie ich den Winkel(um wieviel ° sich das Raumschiff gedreht hat) berechne.
Gibt es da irgend eine Formel zu?

Wenn du aber den Winkel hast, um den die Nase "nach oben" zeigt, kannst du ein Zahlenpaar x/y (=ein Vektor) berechnen, für welches gilt: legst du eine Gerade durch den Punkt 0/0 und durch x/y, so ist diese Gerade parallel zur Flugrichtung deines Raumschiffes.
Diesen Vektor x/y kannst du der Position deines Raumschiffes hinzuzählen, und dann bewegt es sich in die Blickrichtung.

EDIT: Das mit dem realistischen Verhalten. Ist auch klar. Bloß muss erst einmal das andere funktioniren.
 
B

Beni

Gast
Naja, hätte ich dein Code noch im Kopf gehabt, hätte ich dir sagen können, dass das "alpha" dort oben = dem "theta" aus der Klasse Raumschiff ist. (hm, vielleicht ist das ganze ein bisschen verdreht, weil Grahics2D die Rotation anders implementiert hat, als gerade mit x=cos, y=sin. Aber das wirst du ziemlich schnell sehen :-D)
 

KISS

Bekanntes Mitglied
ja natuerlich. im notfall hilft ein tafelwerk. meist hilft aber schon die klasse affinetransform die schon alles bietet was du brauchst, und zwar 3d wenn es sein muss
 

raven

Bekanntes Mitglied
KISS hat gesagt.:
ja natuerlich. im notfall hilft ein tafelwerk. meist hilft aber schon die klasse affinetransform die schon alles bietet was du brauchst, und zwar 3d wenn es sein muss

Tafelwerk hatte ich gerade rausgeholt :wink: :wink: :wink:

Mit affinetransform bin ich nicht klar gekommen, daswegen hab ich die jetzige Möglichkeit genommen. :autsch:
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben