Von GM zu Java

  • Java

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Von GM zu Java

    Hej Leute!

    War zwar schon lange nicht mehr hier, aber das Interesse an Spieleprogrammierung lies mich nicht los. Wollte aber nicht mehr mit GM arbeiten, da mir die Klassen und die Struktur von Java einfach viel besser gefällt. So jetzt wollte ich aber die Einfachkeit von GM nicht verlieren und hab mir daher so ein kleines System geschrieben, das "fast" das kann was ich im GM gebraucht habe. Ich brauch aber noch Kleinigkeiten die ich ausbesseren wollte und da würde ich gerne euren Rat bzw. eure Tipps lesen:

    Map.class
    Hier wird alles gezeichnet. Ist ein JPanel und hat eine Liste mit allen Instanzen die erstellt worden sind.

    Instance.class
    Ist die Instance selber. Sie ist abstract und das ist einfach mein "Model" für die Klassen die ich dann zeichnen will.


    Mein Problem ist jetzt, dass ich nicht weiß wie ich die Koordinaten speichern sollte, zuerst hatte ich int, aber da konnte ich mich nicht längsamer als 1px bewegen, störte mich. Dann nahm ich double, aber jetzt weiß ich nicht wie ich runden sollte, weil die Kollision nicht mehr richtig funktionierte.
    placeFree-Funktion in der Klasse Instance

    Quellcode

    1. public boolean placeFree(double dx, double dy) { boolean intersect = false;
    2. Rectangle r1; Rectangle r2;
    3. r1 = getBounds(dx, dy); for (int i = 0; i < Map.getInstance().getListInstance().size(); i++) { r2 = Map.getInstance().getListInstance().get(i).getBounds(0, 0); if (!this.equals(Map.getInstance().getListInstance().get(i))) { if (r1.intersects(r2)) { if (getInstance(r2.getX(), r2.getY()).getSolid() == true) { intersect = true; } } } }
    4. return !intersect; }



    getBounds-Funktion in der Klasse Instance

    Quellcode

    1. public Rectangle getBounds(double dx, double dy) { return new Rectangle((int) Math.round(x + Math.round(dx)), (int) Math.round(y + Math.round(dy)), (int) Math.floor(sprite.getWidth()), (int) Math.floor(sprite.getHeight())); }



    So. Das wäre erstmals das Problem, zurzeit runde ich einfach alles. Wie würde ich das ganze besser, bzw. schneller lösen können? Ich weiß, dass das hier fast keine Frage ist, aber leider weiß ich nicht wie ich sie stellen sollte.

    MfG Rodrog
    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Ergo: Je mehr Käse, desto weniger Käse.