Asteroids ähnliche Steuerung! Probleme!


Kolumbus

Still Fresh
Joined
Jun 17, 2007
Messages
42
Location
Nordhorn
ICQ
466942047
LOCATION
Nordhorn
Ich habe in GlBasic ein kleines Flugzeug programmiert mit dem man
über einen leeren Bildschirm fliegen kann. Es ist aber mehr zum experimentieren, denn man kann nicht z.B. nur in 8 Richtungen fliegen sondern in alle. Wenn man Gas los läst fliegt der Flieger weiter und wenn man sich dreht ändert er nicht seine Richtung, sondern erst wenn man dann wieder Gas gibt. Außerdem soll dabei die alte Geschwindigkeit und Richtung mit einbezogen werden(also dass er nicht einfach sofort zu 100 Prozent in die neue Richtung fliegt). Doch momentan ist das ganze ein einziger Fehlschlag.
Letzteres funktioniert gar nicht und die andere Version ist vollkommen verbugt(von der Physik her: bei rotosprite wird der Flieger mit steigendem
Winkel immer schneller und bei 90°,180°,225° und 360° stößt sich der Flieger
an unsichtbaren Wänden ab, was am letzten Programmteil liegt)
Das ganze ist komplett, wenn auch zwischen Tür und Angel(tut mir leid wenn man mir nicht folgen kann), dokumentiert. In der Dokumentation liste ich einige Fehlergründe und Lösungen auf, die ich aber selbst nicht umgesetzt bekomme. Wahrscheinlich habe ich das einfach komplett dämlich programmiert und das ist ganz leicht. :p
Hier der Abschnitt der berechnet um wie viele x und y werte versetzt das Sprite gezeichnet wird:

prozent=speed/(90/winkel)
aenderungy=speed-prozent
aenderungx=0+prozent

Je größer der winkel wird desto kleiner wird das Ergebniss von "90/winkel"
und desto größer wird demnach das Ergebniss von speed/dasAndere.
Bei 90° ist speed-prozent dann 0, aber die Geschwindigkeit steigt immer mit dem Winkel (die Geschwindigkeit nicht der Schub)



Wer sich das mal angucken will dem kann ich den Quelltext, die Doku etc. schicken!
 
Ich glaube zu wissen, was du genau erreichen möchtest. Die Rechnung verstehe ich jetzt auf Anhieb nicht ganz - ich würde es glaube ganz anders machen. Leider kann ich im Moment nicht helfen, da ich an einem anderen Projekt bin, was möglichst bald fertig werden soll. Aber wenn ich Lust und Zeit habe, und sich das bis dahin noch nicht erledigt hat, kann ich mir das gerne mal angucken und/oder meine Version schreiben.
 
Wie sieht das aus, Kolumbus, hat sich das inzwischen schon erledigt oder ist an solch einer Steuerung noch Bedarf?
 
Ich kann die Datei leider nicht öffnen aber ist auch nicht so wichtig.

Ich soll unbedingt so eine Steuerung veröffentlichen, verstehe ich richtig? :)

Zabo, verwendest du auch GLBasic?
 
Hallo,

Eigentlich ist so eine Steuerung Physik der 6.? Klasse? Vektoraddition, Reibung, Impulskräfte usw. sollten als Stichworte ausreichen.

Gruss
Michael
 
purestrain, nicht jeder ist in Mathe so gut drauf wie vielleicht du jetzt. Dabei spielt es erstmal keine Rolle, ob es sich um simple oder weniger simple Berechnungen handelt. Ich z.B. kriege solch eine Steuerung noch hin aber zu mehr reicht es dann schon nicht mehr.

Du solltest dies tolerieren können :wink:
 
Hallo,

Sicher kann ich dies tolerieren - Und ich bin in Mathematik auch beiweitem nicht gut drauf, ich halte es nur fuer sinnvoller, Stichworte anstelle von Code-Schnipseln zu geben.

Gruss
Michael
 
So, ich hab mal eben schnell so eine Steuerung gemacht. Für alle, die Interesse daran haben. Wenn es niemand mehr braucht, auch kein Problem, war nicht viel Arbeit ;)

http://www.zshare.net/download/4256071ff10587/

In der Zip-Datei ist das GLBasic Projekt enthalten, einfach in einen Ordner entpacken und die *.gbap im Editor von GLBasic öffnen.

Man kann damit also ein Flugobjekt über den Bildschirm steuern. Je schneller man fliegt, desto träger reagiert es auf Richtungswechsel. Viel Spaß beim rumprobieren :)
Natürlich ist die Steuerung noch nicht optimal und muss sicher weitreichend angepasst werden. Der Code ist noch nicht großartig kommentiert aber ich bitte darum, einfach bei allen Unklarheiten zu fragen, ich will es dann gerne ausführlich erklären.
 
Problem festgestellt

<r>Es gibt noch ein kleines Problem in deinem Programm. Wenn man ganz schnell fliegt, den Flieger dann umdreht und weiter Gas gibt sollte er langsamer werden, wegen dem Gegenschub.<br/>
Man muss es dann ja auch rechnerisch schaffen zu berechnen wie der Flieger fliegt, wenn der Flieger nicht nur um 180° zu der alten Richtung Gas gibt sondern schräg. Und daraus muss mann dann eine Art Mittelwert bilden oder sowas, der sich langsam der neuen Richtung anpasst.<br/>
Vielleicht schafft das ja noch jemand. <E>:)</E><br/>
<br/>
Aber ansonsten gute Arbeit! <E>:D</E></r>
 
Es gibt noch ein kleines Problem in deinem Programm. Wenn man ganz schnell fliegt, den Flieger dann umdreht und weiter Gas gibt sollte er langsamer werden, wegen dem Gegenschub.
Ich weiß schon, was du meinst. Aber ich hatte die Steuerung dafür ausgelegt, dass der Flieger eben auch die Richtung ändert, wenn kein Gas gegeben wird. Deshalb wird er immer einen Bogen fliegen wenn du Gas gibst und nie direkt umkehren und vorher langsamer werden.
Man muss es dann ja auch rechnerisch schaffen zu berechnen wie der Flieger fliegt, wenn der Flieger nicht nur um 180° zu der alten Richtung Gas gibt sondern schräg. Und daraus muss mann dann eine Art Mittelwert bilden oder sowas, der sich langsam der neuen Richtung anpasst.
Sicherlich, möglich ist alles. Nur nicht mit dem Prinzip, wie ich es hier gemacht habe.
Vielleicht schafft das ja noch jemand.
Es wäre wünschenswert wenn du nicht darauf wartest, das dir das wieder jemand macht, sondern jetzt mit Hilfe meines Codes als Beispiel dir selbst Gedanken machst, wie du den Effekt erreichen könntest. Hast du denn schon verstanden, wie mein Code funktioniert?
 
Ah danke, jetzt hat's geklappt. Der Typ von Steuerung dürfte wohl genau dem entsprechen, was Kolumbus möchte.
 
Hallo,

Wird zwar nicht vielleicht nicht mehr gebraucht (hab den code nicht gesehen), aber trotzdem:

Jedes 2D-Objekt hat eine Geschwindigkeit und Position (vX, vY, pX, pY). Wenn ich nun eine Steuerung aehnlich von Asteroids brauche, muss nur folgendes berechnet werden:

pro spielzyklus (frame ect.)
beginn

pX := pX + vX;
pY := pY + vY;

wenn (beschleunigungstaste gedrueckt)
beginn
vX := vX + sinus(richtung);
vY := vY + cosinus(richtung)
ende

wenn(reibung)
begin
vX := vX * 0.99
vY := vY * 0.99
end

ende

Dies ist physikalisch nicht ganz korrekt, und Sinus/Cosinus muss evtl. angepasst werden, je nach Koordinatensystem.

Gruss
Michael
 
Ich finde es ist schöner wenn der Winkel einfach etwas hinterher hinkt. Also man erhöt den Winkel um 2,
IF KEY(203) THEN INC angledesired,2
IF KEY(205) THEN DEC angledesired,2
der richtige Winkel ändert sich aber langsamer(inc 1 statt 2)
IF angleactual>angledesired THEN DEC angleactual,1
IF angleactual<angledesired THEN INC angleactual,1
und am ende kommt dann die normale Berechnung.
INC x,SIN(angleactual)*movespeed
INC y,COS(angleactual)*movespeed

Aber Danke für die Steuerung hat sehr geholfen! :)


Ich habe letztens im Internet den Code für ein Partikelprogramm gefunden. Ist auch sehr einfach, aber wenn mehr als ca. 450 Partikel gleichzeitig da sind(was passiert wenn man bei Kollisionen mit dem Bildschirmrand 2 neue Partikel an der Maus setzt)erscheint eine Fehlermeldung das auf den Speicher nicht zugegriffen werden konnte. Kann man das iergendwie umgehen? Indem man mehrere Arrays verwendet oder wie in dem Beißpiel von inkey() in der Hilfe das Array am Anfang füllt. Bei Interesse kann ich den genauen Code zuschicken.

Ich hab´ dann nochmal das Beißpiel zu sin() angeguckt und wollte einfach ein Programm schreiben bei dem mehrere Flugzeuge auf dem Bildschirm kreisen und zwar da wo man hinklickt. Aber wenn man die Maus gedrückt hält kommen tausende Flieger mit Tiefeneffekt, weil sie ja nacheinander gezeichnet werden. Man könnte dann noch Spielereien einbauen wie das die die weiter hinten liegen auch kleiner sind oder sich alle leicht versetzt drehen.

PS: Wäre dankbar für eine kurze Rückmeldung. Ich kann den Code auch zuschicken.
 
Aber Danke für die Steuerung hat sehr geholfen!
Das ist doch die Hauptsache.
PS: Wäre dankbar für eine kurze Rückmeldung. Ich kann den Code auch zuschicken.
Du kannst mir den Code mal per PM schicken, ich würde mir das mal mit den Partikeln angucken. Ich kann mir vorstellen, dass es einfach lösbar sein sollte, diesen Absturz zu verhindern.

Mit mehreren kreisenden Fliegern musst du mir mal genauer noch erklären, kannste auch per PM bitte machen. Dann können wir sehen, was sich machen lässt.
 
Back
Top