[英]Whats a good way to save tile sprites from my level editor?
我已經在Java中建立了一個基於圖塊的關卡編輯器,該編輯器將要完成,但是當我編寫保存該關卡的方法時,我所有的圖塊都是圖像精靈,因此我不知道保存它們的方法,因此實際的游戲可以讀取它們,而無需將每個圖塊都變成自己的圖像文件,然后我需要將其導入才能在真實游戲中讀取。 (可能有700多個磁貼,一個關卡可能會使用100個磁貼);
我對大家的問題是:保存所有這些圖塊的最佳方法是什么? 我熟悉將內容保存到文本文件中,但是無法以相同的方式保存這些圖像。 有沒有一種方法可以保存關卡,以使基於文本的信息與平鋪圖片保存在同一位置?
這是我的tile類,以及到目前為止我保存方法的內容
public class Tile {
int x, y, w, h, type;
BufferedImage layer1Image;
BufferedImage layer2Image;
BufferedImage layer3Image;
BufferedImage layer4Image;
boolean walkable;
public Tile(int x, int y, int w, int h) {
walkable = false;
this.x = x;
this.y = y;
this.w = w;
this.h = h;
type = 0;
layer1Image = null;
layer2Image = null;
layer3Image = null;
layer4Image = null;
}
public Tile() {
}
public int getX() {
return x;
}
public int getY() {
return y;
}
public int getW() {
return w;
}
public int getH() {
return h;
}
public void setX(int newX) {
x = newX;
}
public void setY(int newY) {
y = newY;
}
public void setW(int newW) {
w = newW;
}
public void setH(int newH) {
h = newH;
}
public boolean mouseOver(int mouseX, int mouseY) {
if (mouseX > x && mouseX < x + w && mouseY > y && mouseY < y + h) {
return true;
}
return false;
}
public int getType() {
return type;
}
public boolean getWalkable() {
return walkable;
}
public BufferedImage getLayer1Image() {
return layer1Image;
}
public BufferedImage getLayer2Image() {
return layer2Image;
}
public BufferedImage getLayer3Image() {
return layer3Image;
}
public BufferedImage getLayer4Image() {
return layer4Image;
}
public void clearImages() {
layer1Image = null;
layer2Image = null;
layer3Image = null;
layer4Image = null;
walkable = true;
}
public void setImage(BufferedImage image, int layer) {
switch (layer) {
case 0:
layer1Image = image;
break;
case 1:
layer2Image = image;
break;
case 2:
layer3Image = image;
case 3:
layer4Image = image;
}
}
public void display(Graphics g, int x, int y, int w, int h, int zoom) {
g.setColor(Color.BLACK);
g.drawImage(layer1Image, x, y, w, h, null);
g.drawImage(layer2Image, x, y, w, h, null);
g.drawImage(layer3Image, x, y, w, h, null);
g.drawImage(layer4Image, x, y, w, h, null);
g.drawRect(x, y, w, h);
}
public void getAttributes(Tile tile) {
layer1Image = tile.getLayer1Image();
layer2Image = tile.getLayer2Image();
layer3Image = tile.getLayer3Image();
layer4Image = tile.getLayer4Image();
x = tile.getX();
y = tile.getY();
w = tile.getW();
h = tile.getH();
walkable = tile.getWalkable();
type = tile.getType();
}
public void setWalkable(boolean b) {
walkable = b;
}
// Here is the save, its in a different class in case my formatting in the post is screwy
public void doSaveAsText() {
if (fileDialog == null) {
fileDialog = new JFileChooser();
}
File selectedFile;
if (editFile == null) {
selectedFile = new File("levelData.txt");
} else {
selectedFile = new File(editFile.getName());
}
fileDialog.setSelectedFile(selectedFile);
fileDialog.setDialogTitle("Select File to be Saved");
int option = fileDialog.showSaveDialog(this);
if (option != JFileChooser.APPROVE_OPTION) {
return;
}
selectedFile = fileDialog.getSelectedFile();
if (selectedFile.exists()) {
int response = JOptionPane.showConfirmDialog(this, "Already exists, overwrite?", "Confirm Save", JOptionPane.YES_NO_OPTION,
JOptionPane.WARNING_MESSAGE);
if (response != JOptionPane.YES_OPTION) {
return;
}
}
PrintWriter out;
try{
FileWriter stream = new FileWriter(selectedFile);
out = new PrintWriter(stream);
} catch (Exception e){
JOptionPane.showMessageDialog(this, "error");
return;
}
try{
out.println("LevelEditor v1.0");
for(int i = 0; i < mapPanel.tilesList.size(); i++){
Tile currentTile = mapPanel.tilesList.get(i);
out.println("startTile");
out.println("" + currentTile.getX());
out.println("" + currentTile.getY());
out.println("" + currentTile.getW());
out.println("" + currentTile.getH());
out.println("" + currentTile.getWalkable());
out.println("endTile");
}
out.close();
}catch(Exception e){
System.exit(0);
}
}
Any suggestions would be great
您可以將整個更高層次的Java對象保存到輸出流,並在以后加載它們。
請參閱此示例 。
檢出序列化API,或僅提取字節並從中生成十六進制字符串。
如何將BufferedImage
TileImage
到包含對特定圖像的引用的TileImage
類中,然后可以在保存文件中輸出圖像引用。 這樣,您不必一遍又一遍地保存圖像數據,並且更新的圖形將可用於保存的游戲。
我不確定您是否更擔心以下事實:您的圖塊圖像與文本信息是分開的,還是每個圖塊圖像與其他圖塊位於單獨的文件中。
對於第一個問題,您也許可以將文本日期存儲在圖像元數據中(例如:評論)。 然后,您的圖塊將只是圖像文件。
如果您更擔心每個圖塊圖像將與其他圖塊位於單獨的文件中的事實,則可以創建一個包含網格中所有圖塊圖像(或類似圖像)的單個圖像。 然后,您將擁有一個圖像文件,如果需要,也可以在標准圖像編輯軟件中進行編輯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.