Würdet ihr dieses Projekt als "fortgeschritten" bezeichnen?

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

Hi WeissBrot965,

da du Klassen verwendest sowie Module. Ist dein Code fortgeschritten. Aber es gibt einige Dinge die man optimieren könnte. Nutze doch das ganze Potential von JavaScript aus und nutze unterschiedliche Schleifen-Arten. Zudem solltest du Semikolon verwenden, auch wenn es die automatisches Semikolon-Einfügung gibt, kann es zu auch zu Problemen führen. Es wird empfohlen dieses zu verwenden um Fehlerquellen zu minimieren. Es ist auch gängige Praxis dies zu tun.

Du kannst das ganze semmantischer machen und dein Skript in den Head-bereich packen. Da kannst du abfragen ob der DOM geladen wurde.

Also deine JavaScript-Sammlung ist fortgeschritten, aber um professionell zu arbeiten kommen noch einige Dinge vor die du optimieren kannst.

import { canvas, c } from "./canvas.js";
import title_screen from "./scenes/Title_Screen/Title_Screen.js";
import power_up_menu from "./scenes/Power_up_menu/Power_up_menu.js";

export let frame_counter = 0;
export let game;

class Main {
    constructor() {
        this.scene = title_screen;
        //this.scene = power_up_menu;
    }

    loopObjects(objects, method) {
        for(let i = 0; i < objects.length; i++) {
            if(objects[i][method] !== undefined) {
                objects[i][method]();
            }
            if(objects[i].ui_objects !== undefined && method === "update") {
                this.loopObjects(objects[i].ui_objects, method);
            }
            if(objects[i].game_objects !== undefined && method === "update") {
                this.loopObjects(objects[i].game_objects, method);
            }
        }
    }

    update() {
        this.loopObjects(this.scene.ui_objects, "update");
        this.loopObjects(this.scene.game_objects, "update");

        if(this.scene.update !== undefined) {
            this.scene.update();
        }
    }

    draw() {
        this.loopObjects(this.scene.game_objects, "draw");
        this.loopObjects(this.scene.ui_objects, "draw");

        if(this.scene.draw !== undefined) {
            this.scene.draw();
        }
    }
}

window.addEventListener("load", function() {
    game = new Main();

    function updateMain() {
        c.clearRect(0, 0, canvas.width, canvas.height);
        frame_counter++;
        game.update();
        game.draw();
        requestAnimationFrame(updateMain);
    }

    updateMain();
});
Woher ich das weiß:Berufserfahrung – Ich bin gelernter Mediengestalter Digital und Print(IHK)
WeissBrot965 
Fragesteller
 24.03.2024, 14:05

Hi! Da sind echt gute Tipps, danke für die Antwort, werde sie demnächst umsetzen. Und joa den gameloop hab ich mal aus einem alten Projekt kopiert und eingefügt. Funktioniert hat er ja xD

Auch cool das du es so schnell verstanden hast, dass in einem ui_object oder game_object nochmal ein "Gruppenelement" sein kann, welches auch noch mal eine Sammlung von ui oder game objects haben kann. Dachte meine Idee dazu währe absolut Banane.

Außerdem hast du geschrieben ohne Semicolons können Fehler kommen. War bei mir aber nie der Fall. Inwiefern schlussfolgerst du das?

Mfg Weißbrot

0