Registriert: Mo Aug 23, 2010 19:45 Beiträge: 16
Programmiersprache: Delphi und noch mehr
Hallo alle miteinander,
ich hab beschlossen ein kleines Spiel mit OpenGl in Delphi zu programmieren. Da es in 2D sein soll, dachte ich dass es nicht so schwer ist. Ich hab aber trotzdem ein paar Fragen. Programmieren will ich einen Klon von diesem App für Ipod/Iphone: http://www.gameswelt.ch/videos/videos/1 ... ailer.html Also mein Stand ist jetzt soweit, dass ich ein Quadrat auf Quadrat hab und das mit den Pfeiltasten verschieben kann. Das andere Quadrat dient nur wegen der Mapverschiebung, die über WASD stattfindet und mit Q/E kann man zoomen.
Jetzt will ich mich um die "Physik" kümmern. Also mit Pfeiltaste nach oben Gas geben, mit Pfeiltaste nach unten bremsen und jeweils lenken. Ich denke das driften ist eine Sache für später. Ich dachte, dass ich eine Variable nehme, die ich fürs Gas immer erhöhe oder verminder, und das dann auf das Quadrat (ok, eigentlich Rechteck) hinzurechnen. Mein Problem ist jetzt, dass wie mache ich das mit dem lenken, dass man auch diagonal fahren kann. Vielleicht kann mir jmd. ein Tipp geben. Ich werd trotzdem mal den Code anhängen.
Ach und eine Frage hab ich auch noch. Ich gebe die Framezahl und ob ein Fehler vorliegt jeweils auf einem Label aus. Das Problem ist nur, dass das mehrere Sekunden bis Minuten dauert bis da was angezeigt wird. Vielleicht weiß ja jemand was dazu.
Also bei Physik und allgemein bei 2D oder 3D Mathematik ist es immer gut mit Vektoren zu arbeiten. Die erleichtern einem das Leben Du hast dir ja auch schon TVector2f definiert...also benutzen wir das. Ich persönlich habe lieber eine Schreibweise mit .x oder .y statt dem Arrayindex, aber das ist Geschmackssache. Die Schreibweise ist immer Komponentenweise, also z.B.:
vektor * zahl heißt vektor.x * zahl; vektor.y * zahl;
Also ich würde das Auto wie folgt repräsentieren - ein 2D-Vector für die Position (position), Maßeinheit ist "Meter" - ein 2D-Vector für die Geschwindigkeit (velocity), Maßeinheit ist "Meter pro Sekunde" - ein Single für den Winkel (angle) wie das Auto ausgerichtet ist, Maßeinheit ist natürlich das Bogenmaß - ein Single für den Beschleunigungswert (acceleration), Maßeinheit ist "Meter pro (Sekunde zum Quadrat)"
Eine simple "Physik" in jedem Frame wäre dann wie folgt. Dabei ist "timeElapsed" die Zeit in Sekunden die seit dem letzten Frame vergangen ist.
Code:
// Pfeiltasten oben/unten acceleration = 0; if (Pfeiltaste oben gedrückt) then acceleration = acceleration + 1; if (Pfeiltaste unten gedrückt) then acceleration = acceleration - 1;
// Bewegung ausführen position = position + velocity * timeElapsed
Damit hättest du bereits ein Driften eingebaut. Wahrscheinlich ist dir das zu stark, müsste man das was dämpfen in dem man der velocity einen Grenzwert für Bewegungen quer zur Fahrtrichtung gibt. Wenn der Grenzwert (Reifenhaftung) unterschritten wird, wird die Querbewegung auf 0 gesetzt. => Machen wie dann wenn das obige schon mal funzt.
Zitat:
Ach und eine Frage hab ich auch noch. Ich gebe die Framezahl und ob ein Fehler vorliegt jeweils auf einem Label aus. Das Problem ist nur, dass das mehrere Sekunden bis Minuten dauert bis da was angezeigt wird. Vielleicht weiß ja jemand was dazu.
Du benutzt GetTickCount, was wenn ich das richtig im Kopf habe mit Millisekunden arbeitet. Viel zu ungenau für deine Zwecke. Deine Grafikkarte langweilt sich wenn du nur ein Quad zeichnest. DrawTime dürfte recht häufig 0 sein, entsprechend lange dauert es bis TimeCount 1000 erreicht.
Du solltest zudem besser die Zeit messen die du vom Aufruf von IdleHandler bis zum nächsten Aufruf brauchst, nicht die Zeit zum Aufruf von Render.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Für einen Einstieg in das Thema Vektoren würde ich dir die Tutorials Lineare Algebra und Nachsitzen empfehlen!
greetings
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Registriert: Mo Aug 23, 2010 19:45 Beiträge: 16
Programmiersprache: Delphi und noch mehr
Gut danke. Werd mich mal mit den Tutorials beschäftigen. Hoffe das ich das kapiere bin in der 10. Klasse Gymnasium und wird sind erst bei Differenzialgleichung bzw. Ableitungsfunktionen. Ich weiß wird sind weit hinterher mit dem Stoff, aber das liegt nicht an mir, sondern an meinen weiblichen Mitschülerinnen. Aber eigentlich kapier ich Mathe immer recht schnell und ich bin auch Physik/Mathe/Chemie/NWT sowie Elektrotechnik interessiert.
Hoffe das ich das kapiere bin in der 10. Klasse Gymnasium
Alles kein Problem, einfach nur solange Fragen stellen bis du es verstanden hast. Auch dumme Fragen sind erlaubt
Zusatz: Um meinen obigen Code ohne Kentnisse der Vektorschreibweise zu verstehen musst du eigentlich nur die letzte Zeile duplizieren, einmal für ".x" und einmal für ".y". Das mit den Vektoren war nur "vorbeugend", weil du es brauchen wirst wenn du das Driften schöner haben willst.
Registriert: Mo Aug 23, 2010 19:45 Beiträge: 16
Programmiersprache: Delphi und noch mehr
Flash hat geschrieben:
@Traude: Weil er sich von ihnen Ablenken lässt - deshalb...
Die hocken einer Reihe vor mir und das sind nicht die Mädchen von denen ich gerne abgelenkt werde.
Flash hat geschrieben:
@MMT: Gib den Mädels doch mal Nachhilfe. Hat sich bei mir nie angeboten, war da leider nicht sehr begabt.
Ich kann leider nicht so gut erklären bzw. noch komplizierter als im Matheheft und dann kapiert es keiner mehr. Wieso einfach wenns auch kompliziert geht.
Die hocken einer Reihe vor mir und das sind nicht die Mädchen von denen ich gerne abgelenkt werde.
Selber schuld. Was hockst du dich auch hinter Mädchen, von denen du nicht gerne abgelenkt wirst? Hock dich doch hinter die, von denen du schon gerne abgelenkt wirst (*). Oder sitzen die schon neben dir?
(*)Hab ich damals in meiner Schulzeit gemacht. Gebracht hats erstaunlicherweise nix.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Die Dynamik dieses Forums überrascht mich jedes Mal aufs neue…
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Man sollte z.b. den Rohrstock wieder in das Unterrichtssystem integrieren.
_________________ Denn wer nur schweigt, weil er Konflikte scheut, der macht Sachen, die er hinterher bereut. Und das ist verkehrt, denn es ist nicht so schwer, jeden Tag zu tun als ob's der letzte wär’. Und du schaust mich an und fragst ob ich das kann. Und ich denk, ich werd' mich ändern irgendwann. _________________Farin Urlaub - Bewegungslos
Registriert: Mo Aug 23, 2010 19:45 Beiträge: 16
Programmiersprache: Delphi und noch mehr
OK ich muss jetzt nochmal fragen.
Um das oben geschriebene Umzusetzen mache ich mich an die Tutorials. Nun gibt es ja dieses Vektoren-Tut. Im Grunde muss ich doch das lesen, verstehen und die Funktionen in eine Unit packen. Richtig?
Sorry, dass ich mich so spät melde. Hatte nie Zeit dran zu arbeiten
Im Grunde muss ich doch das lesen, verstehen und die Funktionen in eine Unit packen. Richtig?
Ich nehme an du meinst dieses Tut. Ja, im Grunde da alles wichtige drin was du für den Anfang brauchst. Matrizen sind im nächsten Tutorial ("Nachsitzen") erklärt.
Mitglieder in diesem Forum: Bing [Bot] und 6 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.