![]() |
Minispiel-Physik
|
Re: Minispiel-Physik
|
Re: Minispiel-Physik
ja, an newton hatte ich auch schon gedacht, aber damit kenne ich mich nicht aus. kennt jemand ein tutorial dazu?
gruß |
Re: Minispiel-Physik
|
Re: Minispiel-Physik
"Motion Mountain"! :) ->
![]() Mein Lieblingsphysikbuch und auch noch kostenlos. |
Re: Minispiel-Physik
Liste der Anhänge anzeigen (Anzahl: 1)
Ich glaube nicht, dass man für so ein Spiel eine Physikengine braucht. das ist ein bisschen mit Kanonen auf Spatzen geschossen. Ein bisschen Pseudophysik und das wars ;) Schließlich ist die Physik im Spiel ja auch nicht gerade realistisch. :mrgreen:
Ich habe mal eine kleine Zecihnung angehängt, wie ich das machen würde. |
Re: Minispiel-Physik
Zitat:
zu dem buch: ich habe es mir mal runtergeladen und werde es mir mal anschauen. :) gruß |
Re: Minispiel-Physik
Naja, ein bisschen Mechanik halt.
v = a * t s = 0.5 * a * t^2 und das war's auch schon. Ein bisschen Newton'sche Axiome und das war kein Hexenwerk. So kann man recht leicht berechnen, wie weit das Teil fliegen muss. Man kann es mit der Erdbeschleunigung fallen lassen... Aber Eigentlich brauchst Du dafür nur ein bisschen Sinusse und Cosinusse, da Du eigentlich nur Geschwindigkeitsvektoren miteinander verrechnen musst. Die Beschleunigungen sind eigentlich unwichtig. LG, Markus |
Re: Minispiel-Physik
okay die gleichungen kenn ich ja aus physik ;) aber was nehme ich als zeit? die differenz zwischen den frames?
und wie kann ich die kollision mit dem boden realisieren? also die abfrage nach einzelnen pixeln dürfte ausscheiden bei oder? vielen dank! :) gruß |
Re: Minispiel-Physik
Du könntest ein Polygon benutzen und dann mit PointInPoly prüfen:
Delphi-Quellcode:
Und wie gesagt, bei der Physik würd ich mir nicht so viel Arbeit machen. Bei der Beschleunigung bergab bzw. der Verlangsamung bergauf würde ich einfach ein bisschen rumexperimentieren bis es passt. Und außer Beschleunigen, Bremsen und Springen gibt es in dem Spiel ja auch nichts, oder? Beuschleunigen und Bremsen dürfte jedenfalls kein Problem sein und Springen eigentlich auch nicht.
Function PointinPoly(points:array of Tpoint;nrpoints:Integer;tp:Tpoint):Boolean;
var hnd:hdc; BEgin hnd:=CreatePolygonRgn(points,nrpoints,Winding); Result:=PtInRegion(hnd,tp.x,tp.y); DeleteObject(hnd); end; //edit: @0,375: Uppsi, äh ja meinte ich^^ |
Re: Minispiel-Physik
Du meinst ein Polygon, oder?
Der korrekte Weg ist so: Man nimmt sich die Erdbeschleunigung (9,8m/s²) und zerlegt sie in Zugkraft (sin alpha * 9,8m/s²) und Normalkraft (cos alpha * 9,8m/s²), wobei alpha der Steigungswinkel deiner Strecke ist. Das ist dann realistische Physik. Ob du dem Spiel eine etwas "unrealistischere" Physik geben willst, um es besser spielbar zu machen, musst du entscheiden. Das wird oft gemacht, zum Beispiel in Shootern, in denen man in der Luft noch seinen Landepunkt verändern kann oder in Rennsimulationen, in denen man das Auto in der Luft noch nach links und rechts drehen kann. |
Re: Minispiel-Physik
Wie bereits gesagt ist dafür wirklich keine komplette Physik Engine nötig :)
Das wäre viel zu viel! Zum Thema Kollisionsabfrage, du hast dann ja irgendwie die Daten des levels gegeben (wo sind Schienen, Hindernisse, etc.). Die Abfrage zur Kollision würde ich einfach über 3 Punkte des Waagens realisieren (Vorne, Mitte, Hinten - oder 2 Punkte, die Räder). Du überprüfst einfach nur die Y-Komponenten. Wenn das ding noch irgendwie mit Objekten vorwärts zusammen stoßen kann dann würd ich vorne und hinten auch noch Kollisionspunkte dran hängen. |
Re: Minispiel-Physik
also soll ich dann im prinzip jeden pixel meier welt aufschreiben und dann überprüfen?
das ganze dann am besten in bereiche eingeteilt um zu große schleifen zu vermeiden? gruß |
Re: Minispiel-Physik
Hi,
also ich beschäftige mich momentan auch mit diesem Zeug, weil ich plane eine Sonic (the Hedgehog)-Engine zu programmieren. Dort will ich es so machen, dass ich das Level in etwa 100x100 große Kästchen einteile, in denen jeweils vermerkt ist, welche Objekte (in deinem fall eben die Linien auf der Oberfläche des Bodens) darin liegen. Diese Objekte würde ich dann noch mal genauer prüfen. Ich denke, dass sich damit die Performance unter Umständen beträchtlich erhöhen lässt. Vielleicht kannst du es ja so ähnlich machen. |
Re: Minispiel-Physik
ja das sehe ich genauso. über die größe de einteilung muss man einfach mal experimentieren.
zum thema visualisierung:denkt ihr eine reine VCL-Programmierung würde dazu ausreichen, oder soll ich das ganze wieder in eine Engine verpacken? |
Re: Minispiel-Physik
Zitat:
Zur Visulisierung würde ich mal graphics32 versuchen. |
Re: Minispiel-Physik
okay ich habe mir mal graphics32 runtergeladen allerdings gib es ein problem. auch bei diesem Image sind die koordinaten vom typ integer...dadurch werden die berechnungen natürlich sehhhr ungenau...weiß jemand abhilfe?
gruß |
Re: Minispiel-Physik
Du hast dir wahrscheinlich die Funktionen von TBitmap32.Canvas angeschaut. Schau einmal direkt im Bitmap, da wirst du Funktionen wie Line, Pixel, ... mit etlichen Suffixen finden, die dir alle Wünsche erfüllen werden. Näheres zu den Suffixen natürlich in der Hilfe ;) .
[edit] Zitat:
[/edit] |
Re: Minispiel-Physik
genau Y-werte benötige ich für die berechnung von beschleunigung und erdanziehung und sowas ;)
bei Integer sieht das ganze etwas ruckelig aus ;) mit Bitmap meinst du also ich soll einfach ein bitmap verschieben anstatt eines TImage32? das wäre natürlich eine idee wenn wie positionen davon real sind. :) gruß |
Re: Minispiel-Physik
Du solltest Besser keine Images verschieben, sondern selber zeichnen. Spätestens bei der Transparenz wird's sonst nämlich kritisch, aber auch die Performance dürfte eine Rolle spielen.
Die Graphics32-Bibliothek bietet eine Menge Funktionen, um Bilder gedreht verzerrt oder sonstwie zu zeichnen. Du brauchst für jeden beweglichen gegenstand ein TBitmap32, z.B. für den Wagen. Diesen Wagen (und die anderen Gegenstönde) zeichnest du dann im richtigen Winkel gedreht auf einen Buffer, der so groß ist wie dein fenster und ebenfalls ein TBitmap32 sein sollte. Diesen Buffer kopierst du dann noch auf das Canvas des Formulars, und fertig ist der Frame. :cheers: |
Re: Minispiel-Physik
Zitat:
Zitat:
|
Re: Minispiel-Physik
mann kann immer die Berechnungen mit Float durchführen, nur vor dem Zeichnen muss man Round() aufrufen. Ist doch auch logisch. Die Pixel auf dem Bildschirm sind schließlich auch Integer. Es gibt nun mal keine halben Pixel ;)
|
Re: Minispiel-Physik
Liste der Anhänge anzeigen (Anzahl: 1)
also ich fasse mal zusammen:
-meine leveldatei besteht aus einem dokument in dem "eckpunkte" meines levels stehen. das heißt alle punkte an er sich die y-achse verändert. diese punkte liegen in abschnitten in dem dokument -->bessere performance -meine visualisierung mach ich mit graphics32. und zwar zeichne ich meine frames in einen buffer und dann auf mein canvas(hierzu noch eine frage: soll ich auf ein canvas der graphics kompos zeichnen?bringt mir das performace im gegensatz zum form canvas?) -Die physik werde ich mit den mechanikgleichungen bearbeiten. (Auch hier noch eine frage: ich habe einen timer im moment, in dem ich meine gleichung wegdifferenz = 0.5*9.81*t² berechne. diese dient im moment für die erdanziehung. nun muss mein wagen aber ja springen können. wie soll ich das machen? das passiert natürlich mit der selben gleichung. aber wie soll ich die in mein programm implementieren? noch ein timer, der bei bedarf anspringt? welche beschleunigung soll ich wählen?das ist mir doch vollkommen frei oder?(außer halt größer als 9.81 ;) ) die differenz wird dann halt vom y-wert abgezogen, das stimmt doch so oder?) -im anhang findet sich ein kleines bespielprogramm welches ich schnell geschrieben habe. hier wird die problematik mit den timern deutlich. vielen dank :) gruß |
Re: Minispiel-Physik
Hi, ich hab mir die Demo mal angesehen. So würde ich es nicht machen.
Schau mal in den Graphics32-Beispielen in die Demo "Layers". Dort kannst du sehen, wie man sowas realisiert. Schau die ![]() Das heisst: Der Hintergrund ist ein TImage32, die Erdkugeln sind Layers, die sich frei positionieren, einblenden und ausblenden lassen. Die Grafiken dazu werden beim Start in eine TBitmap32List geladen. Die Laderoutine hab ich übrigens 1:1 aus der Layers-Demo übernommen ;) Ich glaube, nach diesem Prinzip kann man durchaus so ein kleines Spiel, wie du es möchtest, machen. |
Re: Minispiel-Physik
Also ich hasse ja normalerweise solche Posts wie: 'Warum das Rad neu erfinden, nim diesunddas', aber bei Graphikdarstellung mit Canvas rumfrickeln ist doch ein bisschen naja. Nimm eine Graphikbibliothek, die nimmt Dir das ganze Gewurschtel ab. Zudem kriegst Du Layer, Transparenz, gedrehte Bildchen uws. gratis dazu und hardwarebeschleunigt isses auch noch. Hierzu fällt mir ein seht gutes Tut
![]() |
Re: Minispiel-Physik
@Sidorion:
Ich geh davon aus, dass es sich hier um einen Anfänger (was Grafik-Programmierung betrifft) handelt. Und den gleich ins OpenGL zu schubsen, ist wohl nicht grad optimal. Ich denke, wenn er mal paar einfachere Sachen fertig gestellt hat, wird er selbst zu dem Schluss kommen, sich mal mit Engines zu befassen ;) |
Re: Minispiel-Physik
Ich war auch noch Anfänger, als ich mit OpenGL angefangen hab, und ich habe es nicht bereut. Zur Not kann man auch DelphiX verwenden, das ist nicht ganz so kryptisch.
|
Re: Minispiel-Physik
Ganz im Gegentum. 1. wird einem mit einer Bbliothek so ziemlich alles, was Zeichnen heisst abgenommen, er muss sich sozusagen nur mit der Mathematik(Physik) beschäftigen und 2. sieht er wesentlich schneller Resultate, die dann wahrscheinlich auch auf Anhieb besser aussehen werden.
Es ist doch wesentlich einfacher, einer Bibliothek su sagen: Zeichne ein um 30° gedrehtes Viereck mit diesem Bild an jene Stelle, als die Bitmaps irgendwie im Speicher zu rotieren und die Rastepositionen, Transparenzen usw. selber zu berechen. Wie Du schon sagtest: Er wird selber zu dem Schluss kommen... Wenn man sich ber diese Mühen ersparen will, kann mans auch gleich ordentlich machen. p.s.: 3_of_8: Delphix ist keine ordentliche Graphikbibliothek und die Einarbeit hier ist genauso sinnvol, wie alles selber Zeichnen wollen. |
Re: Minispiel-Physik
Zitat:
Das ![]() aber ich denke ich werde dies doch tun. auch wenn ich dann wieder alles selbst programmieren muss wie z.b. die events. ist zwar ärgelich aber egal ;) hier direkt OGL in reiner form zu benutzen halte ich für unnötig ;) OGL an sich hab ich schon gelernt. also ich denke ich werde meine altbekannte "fear2d-Egine" nehmen und damit sollte das funktionieren. hat jemand eine idee wie ich das mit der sprungkraft machen soll?so wie ich es in der demo gemacht habe ist wohl nicht so optimal... :stupid: gruß EDIT: also von DelphiX kann ich auch nur abraten ;) mir hat es überhaupt nicht gefallen :| |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:45 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz