libGDX Welt speichern

cool_brivk24

Mitglied
Hallo liebes Forum:

Ich habe mir ein Minecraft-clone mit LibGDX(Desktop) programmiert und wollte fragen ob es möglich wäre die generierte Plattform, die ich schon bebaut habe, zu speichern und als Datei später zu laden. Speichern, fände ich noch Okay. Ich weiß, dass dies mehrere Funktionen benötigt, bzw. eine getBlocks Funktion. Ich poste mal den Code der HauptKlasse des core, in der alles steht.

Java:
package com.coolbrick.minecraft;
import javax.swing.text.html.HTML.Tag;
import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.PerspectiveCamera;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.g3d.Environment;
import com.badlogic.gdx.graphics.g3d.ModelBatch;
import com.badlogic.gdx.graphics.g3d.attributes.ColorAttribute;
import com.badlogic.gdx.graphics.g3d.environment.DirectionalLight;
public class MinecraftClone extends ApplicationAdapter {
 
 //Camera
 public final float field_of_view = 67f;
 public final float camera_near = 1;
 public final float camera_far = 300;
 public final float camera_velocity = 15;
 public final float camera_degrees_per_pixel = 0.08f;
 public final float crosshair_size = 25;
 
 public Environment env;
 public PerspectiveCamera camera;
 public SpriteBatch batch;
 public ModelBatch model;
 public Texture crosshair;
 public FPSControll camera_controller;
 public Grid grid;
 public TagNacht instance;
 public float clearColor1 = 0.5f;
 public float clearColor2 = 0.8f;
 public float clearColor3 = 1f;
 public float clearColorAlpha = 1f;
 
 @Override
 public void create() {
 
 
  env = new Environment();
  env.set(new ColorAttribute(ColorAttribute.AmbientLight, 0.5f, 0.5f, 0.5f, 1f));
  env.add(new DirectionalLight().set(252f, 233f, 79f, -1f, -0.8f, -0.5f));
  env.add(new DirectionalLight().set(0.6f, 0.6f, 0.6f, 1f, 0.8f, 0.5f));
 
  batch = new SpriteBatch();
  model = new ModelBatch();
  instance = new TagNacht();
 
 
 
  camera = new PerspectiveCamera(field_of_view, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
  camera.position.set(0f, 10f, 10f);
  camera.near = camera_near;
  camera.far = camera_far;
 
  camera_controller = new FPSControll(camera) {
   @Override
   public boolean touchDown(int screenX, int screenY, int pointer, int button) {
    if(button == 0) {
     grid.editBoxByRayCast(camera.position, camera.direction, null);
    } else if(button == 1) {
     grid.editBoxByRayCast(camera.position, camera.direction, Block.Type.DirtBlock);
    } else if(button == 2) {
     grid.editBoxByRayCast(camera.position, camera.direction, Block.Type.StoneBlock);
    }
    return super.touchDown(screenX, screenY, pointer, button);
   }
  };
  camera_controller.setDegreesPerPixel(camera_degrees_per_pixel);
  camera_controller.setVelocity(camera_velocity);
 
  crosshair = new Texture(Gdx.files.internal("interface/Crosshair.png"));
 
  grid = new Grid();
 
  Gdx.input.setInputProcessor(camera_controller);
  Gdx.input.setCursorCatched(true);
 
 
 }
 @Override
 public void render() {
  camera_controller.update();
  Gdx.gl.glClearColor(clearColor1, clearColor2, clearColor3, clearColorAlpha);
  Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);
 
  model.begin(camera);
  grid.renderGrid(model, env);
  model.end();
 
  float crosshair_x = (Gdx.graphics.getWidth() - crosshair_size) / 2;
  float crosshair_y = (Gdx.graphics.getHeight() - crosshair_size) / 2;
 
  batch.begin();
 
  batch.draw(crosshair, crosshair_x, crosshair_y, crosshair_size, crosshair_size);
 
  batch.end();
 }
 @Override
 public void dispose() {
  grid.dispose();
  crosshair.dispose();
 }
}
Und meiner Block.java Klasse
Java:
package com.coolbrick.minecraft;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.VertexAttributes;
import com.badlogic.gdx.graphics.g3d.Material;
import com.badlogic.gdx.graphics.g3d.Model;
import com.badlogic.gdx.graphics.g3d.ModelInstance;
import com.badlogic.gdx.graphics.g3d.attributes.TextureAttribute;
import com.badlogic.gdx.graphics.g3d.utils.MeshPartBuilder;
import com.badlogic.gdx.graphics.g3d.utils.ModelBuilder;
import com.badlogic.gdx.graphics.g3d.utils.shapebuilders.BoxShapeBuilder;
import com.badlogic.gdx.math.Matrix4;
import com.badlogic.gdx.math.Vector3;
import com.badlogic.gdx.utils.Disposable;
public class Block implements Disposable {
 
 private final float box_size = 5f;
 
 private static ModelBuilder model_builder = new ModelBuilder();
 private Material mat;
 private Type type;
 private ModelInstance instance;
 private Model model;
 
 public Block(Texture texture, Type type) {
  this.type = type;
  mat = new Material(TextureAttribute.createDiffuse(texture));
  model_builder.begin();
  MeshPartBuilder mesh_part_builder = model_builder.part("box", GL20.GL_TRIANGLES,
    VertexAttributes.Usage.Position | VertexAttributes.Usage.Normal | VertexAttributes.Usage.TextureCoordinates, mat);
 
  BoxShapeBuilder.build(mesh_part_builder, box_size, box_size, box_size);
 
  model = model_builder.end();
 
  instance = new ModelInstance(model);
 }
 
 public void setPosition(float x, float y, float z) {
  instance.transform = new Matrix4().translate(x, y, z);
 }
 
 public Vector3 getPosition() {
  float x = instance.transform.getValues()[Matrix4.M03];
  float y = instance.transform.getValues()[Matrix4.M13];
  float z = instance.transform.getValues()[Matrix4.M23];
  return new Vector3(x,y,z);
 }
 
 public Model getModel() {
  return model;
 }
 
 public ModelInstance getInstance() {
  return instance;
 
 }
 @Override
 public void dispose() {
  model.dispose();
 }
 
 
 public enum Type{
  DirtBlock,
  StoneBlock,
  GrassBlock,
  SandBlock,
  GlassBlock
 
 }
 
}

Nicht zu vergessen die Grid.java Klasse
Java:
package com.coolbrick.minecraft;
import com.badlogic.gdx.graphics.g3d.Environment;
import com.badlogic.gdx.graphics.g3d.ModelBatch;
import com.badlogic.gdx.math.Vector3;
import com.badlogic.gdx.utils.Disposable;
public class Grid implements Disposable{
 private final int grid_size = 40;
 private final float field_size = 5f;
 private Block field[][][];
 
 public Grid() {
  field = new Block[grid_size][grid_size][grid_size];
  for(int i = 0; i < grid_size; i++) {
   for(int k = 0; k < grid_size; k++) {
     field[i][0][k] = new StoneBlock();
 
   }
  }
  updatePosition();
 }
 
 public void updatePosition() {
  for(int i = 0; i < grid_size; i++) {
   for(int j = 0; j < grid_size; j++) {
    for(int k = 0; k < grid_size; k++) {
     float x = i * field_size;
     float y = j * field_size;
     float z = k * field_size;
     
     if(field[i][j][k] != null) {
      field[i][j][k].setPosition(x, y, z);
     }
     
     
    }
   }
  }
 }
 
 public void renderGrid(ModelBatch batch, Environment env) {
  for(int i = 0; i < grid_size; i++) {
   for(int j = 0; j < grid_size; j++) {
    for(int k = 0; k < grid_size; k++) {
     if(field[i][j][k] != null) {
      batch.render(field[i][j][k].getInstance(), env);
     }
    }
   }
  }
     
  
 }
 
 public void editBoxByRayCast(Vector3 start_point, Vector3 direction, Block.Type type) {
  int lastPosX = 0;
  int lastPosY = 0;
  int lastPosZ = 0;
  
  for(int i = 1; i < grid_size * 2; i++) {
   Vector3 tmp_start = new Vector3(start_point);
   Vector3 tmp_direct = new Vector3(direction);
   tmp_direct.nor();
   tmp_direct.scl(i);
   Vector3 line = tmp_start.add(tmp_direct);
   line.scl(1 / field_size);
   int x = Math.round(line.x);
   int y = Math.round(line.y);
   int z = Math.round(line.z);
   
   if(x > (grid_size - 1) || y > (grid_size - 1) || z > (grid_size -1) || x < 0 || y < 0 || z < 0) {
    break;
   }
   
   if(field[x][y][z] != null) {
    if(type == null) {
     if(field[x][y][z] != null) {
      field[x][y][z].dispose();
      field[x][y][z] = null;
      updatePosition();
     }
    } else if (type == Block.Type.DirtBlock) {
     field[lastPosX][lastPosY][lastPosZ] = new DirtBlock();
     updatePosition();
    
    } else if (type == Block.Type.StoneBlock) {
     field[lastPosX][lastPosY][lastPosZ] = new StoneBlock();
     updatePosition();
    }
    break;
   }
   
   lastPosX = x;
   lastPosY = y;
   lastPosZ = z;
   
  }
 }
 
 
 @Override
 public void dispose() {
  for(int i = 0; i < grid_size; i++) {
   for(int j = 0; j < grid_size; j++) {
    for(int k = 0; k < grid_size; k++) {
     if(field[i][j][k] != null) {
      field[i][j][k].dispose();
     }
    }
   }
  }
  
 }
}




mfg

-cool_brick24
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Eingaben aus Textfield & ComboBox speichern und in ComboBox wieder ausgeben AWT, Swing, JavaFX & SWT 3
officialmaxl JavaFX Textfield getTextfield() in String speichern AWT, Swing, JavaFX & SWT 1
missy72 JavaFX ObservableList in einer ArrayList speichern. AWT, Swing, JavaFX & SWT 7
B Swing Sudoku: Laden / Speichern von Zahlen aus/in mehrere JTextFields aus/in eine(r) Textdatei AWT, Swing, JavaFX & SWT 9
J Warum kann ich die Spaltennummer in der Konsole anzeigen, diese aber nicht speichern ? AWT, Swing, JavaFX & SWT 6
F Output Stream / File Dateien / Speichern AWT, Swing, JavaFX & SWT 13
D String als Textdatei in ausgewähltem Speicherplatz speichern AWT, Swing, JavaFX & SWT 32
A Swing Datei lässt sich zwar speichern, aber nicht laden (Inhalt im JTextField anzeigen) AWT, Swing, JavaFX & SWT 18
S URLS speichern von Internetseiten AWT, Swing, JavaFX & SWT 3
S Bild neu skalieren - Bild in Bild speichern? AWT, Swing, JavaFX & SWT 6
P Adressbuch Werte speichern AWT, Swing, JavaFX & SWT 21
G Eingabe in JTextField in Array speichern und in JList ausgeben AWT, Swing, JavaFX & SWT 7
G JTextField Eingabe in DB speichern AWT, Swing, JavaFX & SWT 68
B TableView als PDF speichern AWT, Swing, JavaFX & SWT 8
R Scene speichern AWT, Swing, JavaFX & SWT 7
D Inhalt von JTextField in MySQL speichern. Wie ? AWT, Swing, JavaFX & SWT 1
J Text in ein Textfeld eingeben und speichern AWT, Swing, JavaFX & SWT 27
S Swing jScrollPane - pro Eintrag der Liste, die jCheckBoxes Speichern die in dem Eintrag aktiviert wurden AWT, Swing, JavaFX & SWT 2
A Swing Wie Daten in der Form speichern? Array oder ArrayList AWT, Swing, JavaFX & SWT 2
I JavaFX formatierter Text in PDF speichern AWT, Swing, JavaFX & SWT 4
GenerationLost JavaFX FileChooser speichern ohne Zieldatei? AWT, Swing, JavaFX & SWT 12
A Swing Gemaltes Bild über saveDialog speichern unter AWT, Swing, JavaFX & SWT 15
S AWT Daten über TextField und Button in array speichern AWT, Swing, JavaFX & SWT 5
U Eingabe von TextField in variable speichern AWT, Swing, JavaFX & SWT 2
M Kamerabilder in ein Ordner speichern AWT, Swing, JavaFX & SWT 12
F Gezeichnetes als bild speichern AWT, Swing, JavaFX & SWT 4
I JavaFX Speichern der eingefügten Einträge beim Neustart des Programms AWT, Swing, JavaFX & SWT 2
I Variabeln speichern in Desktop Anwendung AWT, Swing, JavaFX & SWT 2
N Swing Benötige Hilfe um ein Swing Canvas zu speichern AWT, Swing, JavaFX & SWT 4
D Objekte einer Oberfläche in eine Datei/Ordner speichern AWT, Swing, JavaFX & SWT 9
S JavaFX Fenstergrösse automatisch Speichern und Laden AWT, Swing, JavaFX & SWT 4
J Swing Fenstereinstellungen speichern AWT, Swing, JavaFX & SWT 2
M Combo Box auswahl in eine Datenbank speichern AWT, Swing, JavaFX & SWT 1
M ausgewählte Inhalt von ListItem inn ComboBox in der Tabelle speichern AWT, Swing, JavaFX & SWT 0
M Bild Beschreibung mit ImageIO speichern AWT, Swing, JavaFX & SWT 1
C Image laden und Speichern - Image wird auf JPanel nicht angezeigt AWT, Swing, JavaFX & SWT 4
J Swing JTable speichern AWT, Swing, JavaFX & SWT 2
C GUI öfters durchlaufen und hinterher Bild speichern AWT, Swing, JavaFX & SWT 1
S Panelzeichnung speichern AWT, Swing, JavaFX & SWT 2
O JTextfield und JComboBox Wert in SQL Database speichern AWT, Swing, JavaFX & SWT 4
J Bilder als Variable an einem Objekt speichern AWT, Swing, JavaFX & SWT 3
M Bild aus JLabel resizen und speichern AWT, Swing, JavaFX & SWT 0
A Swing Malprogramm Bild speichern? AWT, Swing, JavaFX & SWT 9
G Subimage von BufferedImage speichern AWT, Swing, JavaFX & SWT 4
Y JavaFX Bild speichern und Pfad dazu abspeichern AWT, Swing, JavaFX & SWT 2
D JPanel Graphic2D als BufferedImage Speichern AWT, Swing, JavaFX & SWT 5
A JFileChooser Datei speichern AWT, Swing, JavaFX & SWT 4
B Bildverlust bei Speichern in .jar-Archiv AWT, Swing, JavaFX & SWT 3
J 2D-Grafik Bildteile in ein anderes Bild speichern AWT, Swing, JavaFX & SWT 12
B Datenübergabe zwischen Tabs und Daten speichern AWT, Swing, JavaFX & SWT 2
J JFileChooser - Datei speichern AWT, Swing, JavaFX & SWT 7
J JTree speichern AWT, Swing, JavaFX & SWT 4
kodela Teil eines Panels als Graphik speichern AWT, Swing, JavaFX & SWT 3
T Modell als XML Speichern / Laden AWT, Swing, JavaFX & SWT 9
P TextField beim klicken von JButton speichern AWT, Swing, JavaFX & SWT 17
P Öffnen, Speichern von Dat. über DialogBoxen AWT, Swing, JavaFX & SWT 10
B Zustand eines GUI speichern AWT, Swing, JavaFX & SWT 8
I Dialog zum Speichern? AWT, Swing, JavaFX & SWT 16
M JTable Drucken NullpointerException +JTable speichern AWT, Swing, JavaFX & SWT 6
J Swing JTable-Daten Speichern und bei zeilen-änderung beibehalten. AWT, Swing, JavaFX & SWT 6
M Datei Speichern unter Dialog - SWT AWT, Swing, JavaFX & SWT 3
T SWT:Datei speichern / öffnen AWT, Swing, JavaFX & SWT 6
T speichern funktioniert,aber öffnen nicht AWT, Swing, JavaFX & SWT 2
W Grafik von JFrame korrekt speichern AWT, Swing, JavaFX & SWT 7
M Position eines JLabels speichern? AWT, Swing, JavaFX & SWT 3
P nicht sichtbares JPanel / JFrame als Image speichern AWT, Swing, JavaFX & SWT 3
A BufferedImage nach dem Speichern immer schwarz AWT, Swing, JavaFX & SWT 8
J Speichern, Event, Hintergrund getAppletContext AWT, Swing, JavaFX & SWT 2
S JTable - Sortierung beibhalten / Speichern. AWT, Swing, JavaFX & SWT 3
C Checkbox-zustände in einem JFrame speichern AWT, Swing, JavaFX & SWT 8
R Graphics-Object speichern AWT, Swing, JavaFX & SWT 4
T Image skaliert in Variable speichern AWT, Swing, JavaFX & SWT 6
B Panel als Bild speichern AWT, Swing, JavaFX & SWT 11
Daniel_L Grafik erstellen, drin zeichnen und dann speichern AWT, Swing, JavaFX & SWT 2
K Swing Komponente als Bild speichern AWT, Swing, JavaFX & SWT 11
E Profilsichten speichern und dynamsich erzeugen?! AWT, Swing, JavaFX & SWT 2
N JTable direkt editierenund in Datenbanken speichern AWT, Swing, JavaFX & SWT 5
D Swing JTable in Datei speichern und laden AWT, Swing, JavaFX & SWT 3
R JComboBox Ausgabe in String speichern AWT, Swing, JavaFX & SWT 3
F Wert zu Eintrag in ComboBox speichern?! AWT, Swing, JavaFX & SWT 7
0 Ausschnitt eines JPanels als Bild speichern AWT, Swing, JavaFX & SWT 4
A Programmieren einer Agenda mit einer Liste (als Applet und .txt zum Speichern) AWT, Swing, JavaFX & SWT 7
B JTextPane formatierten Inhalt speichern AWT, Swing, JavaFX & SWT 2
R TextField auslesen & in Objekteigenschaften speichern AWT, Swing, JavaFX & SWT 22
B textdatei speichern AWT, Swing, JavaFX & SWT 9
K Swing JFileChooser zum Speichern - FileFilter AWT, Swing, JavaFX & SWT 2
jgh Speichern von User-GUI-Einstellungen AWT, Swing, JavaFX & SWT 2
B Swing Suche JFileChooser zum Speichern AWT, Swing, JavaFX & SWT 2
N gezeichnete Graphiken speichern und wieder anzeigen AWT, Swing, JavaFX & SWT 8
M AWT Datei auf server speichern und beschreiben AWT, Swing, JavaFX & SWT 7
G Swing Image speichern / 0 Byte AWT, Swing, JavaFX & SWT 7
U Wo eingeloggten Benutzer "speichern" AWT, Swing, JavaFX & SWT 10
J Aus einer JList den Inhalt als Textdatei speichern AWT, Swing, JavaFX & SWT 15
C Bild in einer Datenbank speichern? AWT, Swing, JavaFX & SWT 7
Z JTable: Speichern probleme AWT, Swing, JavaFX & SWT 12
L JPanel als Image speichern AWT, Swing, JavaFX & SWT 3
D SWT String aus Textfeld auslesen und in eine Tabelle speichern AWT, Swing, JavaFX & SWT 5
J Werte aus Combobox speichern AWT, Swing, JavaFX & SWT 3
B JEditorPane - Text und Graphik in HTML speichern AWT, Swing, JavaFX & SWT 4
S AWT Speichern von Listkomponenten und Öffnen derer AWT, Swing, JavaFX & SWT 10

Ähnliche Java Themen

Neue Themen


Oben