[Aufgabenstellung] Programmierwettbewerb Nr 4

Perlin-Noise sieht interessant aus. Nur die Implementierung und Übersetzung der Algebra dahinter ist für mich ein bömiches Dorf. Hab schon gegoogelt und Libs und Lösungen gefunden, aber das Verständnis für die Umsetzung fehlt.

Aktuell ist es etwas anders gelöst, mit einer abstrahierten, aber ebenfalls zufällig generierten Landschaft:


Ist nur zu sehr zufällig, als dass man irgendwie gewichten kann wie die Punkte für eine Landung verteilt werden.

Hier ein Update, man kann zwischen beiden Maps (theoretisch) wählen:


Quelle, aber modifiziert:
 
Zuletzt bearbeitet:
Folgend das Video mit Optionen in Aktion:
Ist glaube ich aber auch vorerst vorletzte bis letzte Video.



Es fehlen noch schöne "Win" und "Lose" Ereignisse, die würde ich noch einbauen, ansonsten ist das Projekt zu 95% fertig.

Der Quellcode findet sich hier:

Edit:
Win and Lose Screens sind implementiert und ein verbessertes Design (weg vom grauen Hintergrund!).
Eine Einreichung bzw. eine Score fehlt noch, hatte überlegt das nicht über den Landeplatz zu regeln, sondern eher über nicht verbrauchten Sprit (Effizienz) und andere Startbedingungen die das Spiel erschweren könnten.

 
Zuletzt bearbeitet:
Ahoi, jetzt auch als Live Version online direkt spielbar:

Dank @Darksider für den Tip mit dem multiplen Input, was parallele Steuerung ermöglicht! <3
 
Ahoi, jetzt auch als Live Version online direkt spielbar:
Ja, es fällt da ein Raumschiff von oben nach unten. Aber sobald ich eine Taste drücke, schmiert regelrecht mein Browser ab, da vermutlich übermäßig viele Partikel simuliert werden, wenn ich mich nicht täusche. Ist ein Firefox.
Edit: Es ist unabhängig von der Partikelanzahl, nach wenigen Sekunden hängt das Spiel regelrecht.

Aber lob dafür. Du hast im Endeffekt alle meine Einstellungsmöglichkeiten bei dir irgendwie integriert und dazu noch was ansehnliches gebaut. Respekt dafür. Ich werde zwar meine Version hier auch posten / hochladen, aber die ist nicht mehr mit deiner zu vergleichen, allerdings ist meine, wie schon mehrfach von mir erwähnt (ja, ich wiederhole mich ab und an mal), unfertig und wird es ziemlich sicher auch bleiben.
 
Frame drop hatte ich erst, wenn man auf die Höhe der Landschaft kommt, dabei wird eine Kollisionsabfrage aktiv - die kann je nach Terrain sehr viel Leistung ziehen.
Falls es nicht spielbar ist, der einfachheit halber das "Spitze Terrain" wählen, dann sollte auch die Systemlast massiv heruntergehen. Ist aber nur eine Vermutung woran es liegen könnte.

Falls dich die Details interessieren, du kannst mit dem Performance Tab in den Firefox Developer Tools die Performance aufnehmen und dann siehst du genau wie viele Frames per second gerendert werden können.
Im Optimalfall ~40-60 pro Sekunde. Ich muss aber auch sagen, die checkCollision - Funktion verursacht viel Systemlast, könnte man sicherlich aber auch noch beschleunigen, falls dass das Bottleneck ist.

Aktuell "scant" die Funktion 4 Hitboxen am Raumschiff um die Kollision/Landung auf dem Terrain zu analysieren. Und das kann recht viel Performance kosten. Das hatte ich stellenweise auch in meinem Test und habs dann minimal verbessern können. Wobei, da ist noch Luft, so das wirklich nur die "Randpixel" der Hitboxen gescannt werden, nicht der gesamte "Inhalt" - weil der eigentlich uninteressant ist....

Edit: Habe das drawLanderSVG verbessert, nun werden die Hitboxen nur ein einziges mal erstellt und nicht bei jedem Aufruf der Zeichenfunktion des Landers.
 
Zuletzt bearbeitet:
Also bei mir läuft es (am Handy...) man kann nur nicht steuern *g (klar Handy war nun auch nicht eingeplant)...
Aber das fallende Raumschiff schaut schick aus ;D

Und explodiert so schön :beer:
 
Habe das drawLanderSVG verbessert, nun werden die Hitboxen nur ein einziges mal erstellt und nicht bei jedem Aufruf der Zeichenfunktion des Landers.
Das hat keine Verbessung gebracht. Nach etwa 3 Sekunden nehmen die Grafiken übermäßig viel Ressourcen in Anspruch, so als wenn du einfach immer nur weitere Bilder obendrüber legen würdest, ohne dass du die alten zuvor beseitigst.
Weder spitzes Terrain noch reduzierte Partikel bringen da eine Besserung, vermutlich müllst du den DOM mit deinen alten Grafiken voll oder sowas und der Firefox optimiert das nicht von alleine.

Es geht halt auf unter 5fps runter.

Potentiell könnte an irgendeiner Stelle dein dc Objekt löschen oder so weiterhelfen, wo du einfach das Ding vor dem neuen Zeichnen leerst oder so. Oder ein "neues" erstellst und dann wenn alles in diesem Vorhanden ist, an Stelle des alten anzeigen lässt. So hast du auch weniger / keine Verzögerung zwischen Löschen und Anzeigen.
 
Mit Chrome funktioniert es ohne Probleme. Mit Firefox 66 (64 bit) allerdings nicht. Und sonst ist mein Rechner eigentlich ziemlich potent. Also Arbeitsspeicher und Co. hat der auf jedenfall genug.
 
Ich verwende Firefox Version 66.0.1, damit funktioniert es bei mir.

Am einfachsten zu Troubleshooten wäre es, wenn du 3-4 Performance Aufnahmen erstellen, speichern und hochladen würdest. - Diese kann ich dann importieren und feststellen, wo die Performance Einbrüche herkommen.

Zu deiner Frage, Grafiken werden keine gecached, man kann "optional" das Terrain als Bild speichern lassen, aber Lander SVG, Terrain werden nur einmal geladen und angelegt. Andere Grafiken werden "on the fly" gezeichnet - und das Canvas "cached" auch nicht.

Und letzte Frage, bist du unter Windows oder Linux?
 
Ich bin unter Windows unterwegs.

Aber ich sehe es richtig in deinem Code, dass du einfach immer wieder eine deiner draw() Funktionen aufrufst und mehr Elemente reinmalst?
Wie nehme ich ne Performance-Aufnahme auf?

Edit sowas?:Anhang anzeigen profile.rar
Ich habe die Aufzeichnung gestartet, die Seite neu geladen und ein paar Sekunden aufgezeichnet. Das sollte ja wohl reichen, um zu erkennen, was da passiert ist.
 
Sagen wir so, [kw]clearStage()[/kw] überschreibt alle Pixel mit einer Hintergrundfarbe. Und die des Cavas ist immer im Default ("source-over") ohne Änderungen. Werden also 1:1 übernommen, ohne weitere Berechnungen.

Die Performance Aufnahme kannst du in den Developer Tools (F12) dann "Laufzeitanalyse" und dann "Laufzeitanalyse starten", aufnehmen.

Wenn du eine Aufnahme aufgenommen hast, durch manuelles "starten" und "stoppen" (nach Aufprall des Landers) - kannst du diese dann "Speichern" als "profil.json" . - Am besten du machst zwei Aufnahmen, mit und ohne Interaktion mit entsprechenden Namen.
 
  • Thread Starter Thread Starter
  • #56


Ich habe es gerade unter W10 FF66.0.3 in 4 Tabs zeitnah gestartet und es stürzt nicht ab, es ruckelt nicht und der Lüfter dreht auch nicht hoch.

Ich fange jetzt auch mal langsam an. Allerdings bedeutet das erst einmal Gimp. Sound lasse ich erst mal weg. Das gehört ja nicht zum Wesentlichen. Das kann man immer noch machen.

Finde ich bei Dir keine Winkelbeschleunigung oder hast Du die gar nicht implementiert?
 
Also, das ist sehr komisch... ich hab einmal getestet mit "Canvas" eingeschaltet und ausgeschaltet in den Dev-Tools.

Und eine Aufnahme sieht bei mir so aus: Anhang anzeigen profile_test.json.rar

Was ich festgestellt habe, entweder hast du, weil die Garbage Collection so oft greift, andere(?) bzw. besondere Einstellungen in [kw]about:config[/kw] - und dann nach ".gc" suchen (siehe Screenshot). Oder irgendwas was die Garbage Collection triggert?

gc_options.png

Das zweite was ich festgestellt habe, wenn Canvas in den DevTools aktiv ist oder eingeschaltet, hat es bei mir auch geruckelt. Deaktivieren und den Browser neu gestartet -> Ruckelfrei.

Ansonsten bin ich etwas überfragt aktuell, woran es liegt.

--- [2019-04-18 17:47 CEST] Automatisch zusammengeführter Beitrag ---

Endlich! - Ich freu mich schon auf deine Lösung. :)

Aber eine Winkelgeschwindigkeit ist nicht integriert, nein, hier gehe ich nur um den Faktor 1 hoch oder runter, je nach gezündetem Triebwerk (links, rechts)
 
Das hast du ja super hinbekommen.


Winkelgeschwindigkeit gibt es bei mir auch nicht, das ist frühestens für die "extended Version" geplant, die aber wohl kaum innerhalb des Zeitraums fertig wird. Aktuell hänge ich ein bisschen bei der Kollisionserkennung mit dem Boden fest. Ich habe mir da etwas zu viel vorgenommen, eventuell wechsle ich noch auf ein einfacheres Modell. Wenn ich das über Ostern noch hinbekomme versuche ich noch zumindest so viel Grafik einzubauen dass es eingermaßen spielbar wird. Ansonsten bleibt es bei "Kreis landet auf Ebene".
 
entweder hast du [...] besondere Einstellungen in [kw]about:config[/kw] - und dann nach ".gc" suchen (siehe Screenshot).
gc.PNG
Ich habe allerdings den FF auf einer SSD installiert und da irgendwas mal deaktiviert, dass der nicht ganze Zeit seinen Müll auf die SSD schreibt, sondern im Arbeitsspeicher lebt. Aber sonst... Keine Ahnung.
 
Kurzes Update von mir:
- Kollisionserkennung funktionert eingermaßen
- Planetenoberfläche wird aus einfachen Vierecken zusammengesetzt
- Eine Raumschiffgrafik gibt es schon mal


Es sind nur noch ein paar kleine Schritte zur Minimalversion:
- Schönere Grafik für den Boden
- Schönere Grafik für den Antrieb
- Ein paar Änderungen an den Sieg/Niederlage Bedingungen
- Dynamische Planetengenerierung (ich habe aber schon eine Idee wie ich das mache)
 
Zurück
Oben