Frage

Ich bin gut darin, mein 2D -Remake von Minecraft in Java zu erstellen. Ich weiß, dass es gut gemacht werden kann, Orange451 auf YouTube hat mich dazu inspiriert, dies zu machen. Ich habe alle Blöcke auf dem Laden von MAP aus Textdateien, und wenn das Spiel geladen wird, werden alle Blöcke aus den Textdateien zu einer ArrayList hinzugefügt. Ich habe einen Algorithmus für die Berechnung des Index des Blocks erstellt, den Ihr Cursor im Spiel eingeschaltet ist, und einen Mouselistener hinzugefügt, damit er den Block durch einen Luftblock ersetzt (im Grunde genommen zerstört den Block). Um den Block in der ArrayList zu ersetzen, habe ich die Methode ArrayList Set (Index, OBJ) verwendet. Theoretisch sollte es richtig funktionieren und in gewisser Weise. Das einzige Problem ist, dass es auch einen schwarzen Raum in der Karte ein paar Blöcke entfernt schafft. Das ist extrem frustrierend, zumal ich so weit gekommen bin. Zusätzliche Informationen: Ich benötige eine Methode, die das Objekt in der ArrayList ersetzt, oder eine bessere Möglichkeit, dies zu tun, da meine Kollisionserkennungsmethode auch die ArrayList verwendet, um eine Blöckenposition zu erkennen. BITTE HILF MIR! Ich kann keine Bilder veröffentlichen, aber es setzt den Block auf die Luftstruktur ein, aber ein schwarzes Quadrat (eine Lücke in der Arraylist Mabey?) In der Nähe. Da es zu viel Code gibt, um zu veröffentlichen, ist der Quellcode für das gesamte Projekt: Blockworld 2D -Quelle

War es hilfreich?

Lösung

Sie kämpfen damit, weil eine Arraylist von Objekten, die ihre Koordinate kennen, eine verrückte Möglichkeit ist, diese 2D -Struktur darzustellen. Es ist ungeordnet - Sie können Ihre Arraylist umkehren oder mischen und es würde das gleiche malen. Es hat o (n) Update, da Sie die ArrayList nach einem Objekt der entsprechenden Koordinate durchsuchen müssen, bevor Sie sie ersetzen können. Es kann mehr als ein Objekt mit derselben Koordinate haben. Es kann sich in einem Zustand befinden, in dem sichtbare Koordinaten überhaupt keine entsprechenden Objekte haben - wie Sie hier begegnet sind.

BITTE HILF MIR

OK. Beginnen Sie mit einem zweidimensionalen Array (Array, nicht ArrayList) von Byte. Dies ermöglicht Ihnen 256 Blockarten und damit Ihre Spieler graben, ohne ständig Speicher mit Ihrem zu vergeben new AirBlock(0, 0) Wahnsinn. Um die Welt zu zeichnen, iterieren Sie sich sichtbare Koordinaten und kartieren Bytes zu Bitmap oder mögen.

Auch: Es gibt bereits ein 2D -Minecraft. Es heißt Terraria.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top