Wie mache ich ein Spiel?
-
Ich schrieb:
Wenn (mindestens) eine Sekunde vergangen ist,...
Vielleicht kannst du mir erklären, wie man das ohne Zeitmessung anstellen kann!?
-
volkard hat sowas von Recht.
-
Ich glaube nicht, dass er meinte, Zählen == Zeitmessung.
Ich glaube, er meinte, Zählen + Zeitmessung = Framerate.
-
ntrnt schrieb:
Ich glaube nicht, dass er meinte, Zählen == Zeitmessung.
Ich glaube, er meinte, Zählen + Zeitmessung = Framerate.So ist es. Ich muss natürlich messen, wann eine Sekunde vergangen ist und in diesem Moment gucke ich, welche Zahl mir der Zähler ausspuckt, was dann der Framerate pro Sekunde entspricht.
EDIT: Man muss sich natürlich nicht 1 Sekunde Zeit lassen. Man kann auch weniger oder länger warten und muss dann dementsprechend hoch- oder runterrechnen.
-
Du kannst aber nicht festlegen, wann dein Code für "1 Sekunde" ausgeführt wird. Und im Endeffekt musst du eben doch wieder die Zeit messen, was deinen Zähler überflüssig macht.
-
314159265358979 schrieb:
Du kannst aber nicht festlegen, wann dein Code für "1 Sekunde" ausgeführt wird. Und im Endeffekt musst du eben doch wieder die Zeit messen, was deinen Zähler überflüssig macht.
Ich fürchte, du missverstehst mich. Mein Code wird nicht "1 Sekunde lang ausgeführt", sondern ich messe, wieviel Zeit ein repaint in Anspruch nimmt und addiere das zur Gesamtzeit (Zeitmessung). Wenn die Gesamtzeit >= 1 Sek. ist, dann gucke ich, was mein Zähler sagt (Frames per Second). Danach wird wieder Zähler, als auch der Wert der Variable "gesamtzeit" wieder auf 0 gesetzt.
Ja, die Zeit muss natürlich gemessen werden. Das sage ich doch schon die ganze Zeit. Wenn du eine Methode ohne Zählvariable kennst, dann sei doch so freundlich und beschreibe sie mal. Jeder hier ist offen, wie man etwas noch besser implementieren kann.L. G.
Steffo
-
Oh man.
-
314159265358979 schrieb:
Oh man.
Du bist auch ein bisschen schwer von Verstand, oder?
-
Jo.
-
Mensch, es muss nicht immer so schwer sein...
Ich mache es glaub ich so, dass ich bei jedem Aufruf gucke wie viel Zeit vergangen ist (neue Zeit - alte Zeit) und kann somit raus finden wie viel Zeit seit dem Letzten Frame vergangen ist.
Da der Benutzer keine Ahnung von fps haben muss, sondern die ganze Information nur intern verwendet werden muss, reicht diese Methode vollkommen.
Falls meine Überlgeung grundlegende Mängel aufweist, dann sagt es bitte.Ich brauche das auch nur, um die Geschwindigkeit der Spielfigur auf jedem PC gleich zu haben. Es wird auch kein Hightech Game, sondern dient einzig und alleine dazu, mich selber weiterzubilden und eine gute Note zu erhalten...
Gebräuchlich ist bei Labyrinthen ja, dass man eine Spielfigur um ein Feld verschiebt pro Tastendruck, ich habe aber vor, das ganze etwas dynamischer zu gestalten.
@Steffo:
Ich guck mir das Buch mal an, vlt hilft es ja.Grüsse
Chiller
-
@Chiller: Genau, so macht man das.
@Steffo: Deine Methode ist total ungenau (bzw ungleichmäßig ungenau). Wenn, dann nimmt man die Zeit der letzten X Frames, aber bestimmt nicht jede Sekunde einen Reset.
-
Ähmmmmm
Wie kann ich die Zeit rauskriegen?
Hab es mit java.awt.calendar versucht, aber irgendwie krieg ich das nicht zum laufen.
Ich brauche nur die Anzahl Milisekunden die seit dem Letzten Refresh vergangen sind.
Die FPS krieg ich dann mit der umkehrfunktion (1/x) raus.Grüsse
Chiller
-
probiers mit System.currentTimeMillis()
-
nein, dafür nimmt man seit 1.5: System.nanoTime();
-
So, ich hab das erste Problem gelöst.
Jetzt habe ich das nächste Problem:
Wie kann ich rausfinden ob sich zwei geometrische Figuren (2D) flächenmässig überschneiden?Ich brauche die Information für die Kollisionsberechnung.
Für ein Beispiel und den aktuellen Stand des Projekts könnt ihr hier schauen.
Grüsse
Chiller
-
Chiller schrieb:
Wie kann ich rausfinden ob sich zwei geometrische Figuren (2D) flächenmässig überschneiden?
Für Rechtecke hat die Klasse java.awt.Rectangle die Methode intersects(), die dir sagt, ob sich zwei Rechtecke überschneiden.
Falls es um eine Kollisionserkennung mit Kreis und Wänden geht, könntest du z.B. ein Rectangle erzeugen, in das dein Kreis genau reinpasst und dann über intersects() auf Kollision mit einer Wand prüfen.
http://download.oracle.com/javase/6/docs/api/java/awt/Rectangle.html#intersects(java.awt.Rectangle)
-
Das Problem ist, dass das Kollisionsobjekt des Kreises ein kreis sein muss. Sonst ist es schwierig mit der Spielfigur um eine Kurve zu gehen.
Grüsse
Chiller
-
So mein spiel ist eigentlich fertig. Die Grundfunktionen laufen
Ich werde noch ein paar Funktionen hinzufügen, aber im Grossen und Ganzen läuft es.
Ich wäre froh um Rückmeldungen, vor allem was Bugs anbelangt.Das Spiel findet ihr hier, viel Spass.
Edit:
Weil ich die Website angepasst habe, habe ich den Link geändert. Der originale Link verweist auf meine Homepage: hierGrüsse
Chiller
-
Ich hab's gespielt!
Und ich hab gewonnen!
Gut, oder?
-
Jojo.
Ich werde noch nen Algorithmus einbauen, welcher dir ne Punktezahl gibt.
Diese wird abhängig sein von:
- Verbrauchte Zeit
- Länge des Lösungswegs
- Gebrauchte Felder (Je weniger Falsche Wege man genommen hat desto besser)Das wird dann angezeigt, aber im Moment habe ich noch viel zu viel um den Ohren um an diesem Projekt weiterarbeiten zu können. Ich versuche das ganze aber vor Weihnachten fertig zu kriegen.
Zudem habe ich noch ein paar Programmier-Fehler entdeckt und möchte noch machen, dass man fortan keine Grössenbeschränkung mehr hat.Grüsse
Chiller