あなた自身のもの、特にゲームの面では、XMLは過大評価されています。他の人があなたのファイルのテキストを見る必要がある大企業で働いていたら、XML かもしれません。でも意味がありますが、その場合でもすべてのことをするレベルエディタが書かれているでしょう。
私は自分自身の大会と単純なテキストファイルを持つ、またはちょうどあなたを書くために、データファイル(あなたが情報やオブジェクトの多くを持っている場合)、またはjava.util.Properties
に直接データを書き込むことがjava.io.ObjectOutputStream
とj ava.io.ObjectInputStream
を使用してのいずれかをお勧めしますデータ(プリミティブを書く必要がある場合のみ)
「自動シリアル化」があるのでXMLがうまくいかないのは、私が上で列挙した両方のメソッドも自動であるためですが、Javaで作業するときには言及する価値はないと思いますはるかに高度なレベルです。
また、XMLタグを使用して2Dタイルマップを表現するのは非常に直感的ではありませんが、文字ファイルに1行ずつ書き込むだけで読み書きはかなり簡単です。
EX。)
WWWWWWWWWW
WSWWWWW EW
W W K WW W
W W WW W
W WW WWWDW
W X W
WWWWWWWWWW
あなたはW
ウォールである場合には、上記のような何かを行うことができ、S
はD
がドアで、K
がキーである、E
が出口で、スタートで、X
は怪物です。テキストファイルであっても、すべてが存在し、レベルをどのように設定すべきかは非常に明白です。
私は多くのプロのゲームプロジェクトの中でテキストファイルを使用してきました。実際には、私は誰かのために契約作業をしたときにXMLを使用しただけです。なぜなら、大部分の場合、XMLは不要であり、物事を過度に複雑にするスペースが無駄だからです。
もう一つの例:あなたが起こるかもしれない他のものは何でも想像できる
SpawnFrequency 0.1 20.5
HealthPoints 5
Stats 12 500 30 10 11
。次に、ファイルをJavaに読み込むときには、BufferedReader.readLine()
を使用して各パラメータを取得し、次にString.split()
を使用して、そのパラメータのすべての値の配列を取得します。その後、大きなswitch文またはif/elseグルーピングがsplit配列の最初の値を比較することで、実際に読み込んだパラメータが決まります。この時点では、XMLの有用性に近づいていますが、このような使い方では依然として過度に膨らんでいる可能性があります。
XMLで上記: このような
または多分:
`<GuyStuff>`
`<SpawnFrequencyMinimum>0.1</SpawnFrequencyMinimum>`
`<SpawnFrequencyMaximum>20.5</SpawnFrequencyMaximum>`
`<Health>5</Health>`
`<Strength>12</Strength>`
`<Agility>500</Agility>`
`<Stamina>30</Stamina>`
`<TechnoWizardry>10</TechnoWizardry>`
`<JavaSkillz>11</JavaSkillz>`
`</GuyStuff>`
しかし、もう一度ときにXMLは、しかし、それらの神秘的な値のいくつかは、何ができるかを説明するのに役立つ可能性があり複雑さが増し始めたら、それは非常に簡単だからjava.io.Serializable
を使い始めることもできます。
編集 ここにはシリアライズ可能な例があります。
public class MySaveData implements java.io.Serializable //Serializable doesn't need any methods implemented, it simply says, "hey Java, my object can be written to a file."
{
float data1;
int data2;
Object data3;
//BufferedImage data4; //Note that in order for an object to serialize, it can't contain any data members that are not Serializable, so this would be illegal.
}
import java.io.*;
public class DataReader
{
public void saveData(File loc, MySaveData obj1, MySaveData obj2, MySaveData obj3)
{
try
{
//You can use any type of OutputStream to create an OOS, so you can for
//example use one when you're connected with Sockets or something similar.
ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream(loc));
//Writing objects is tremendously easy, and so are primitives.
//Note that the order you write them in is the same order you will read them.
os.writeObject(obj1);
os.writeObject(obj2);
os.writeObject(obj3);
os.writeDouble(someValueINeededToWrite);
os.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
public void loadData(File loc, PlaceToPutData place)
{
try
{
//ObjectInputStream follows the same rules as OOS mentioned above.
ObjectInputStream is = new ObjectInputStream(new FileInputStream(loc));
//Remember to read your data back the same order you wrote it.
place.obj1 = is.readObject();
place.obj2 = is.readObject();
//If you don't want one of the objects for some reason and want
//to get something after it, you can just read the next one but not use it.
readObject();
place.value = is.readDouble();
is.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
通常、ファイルはnew java.io.File("/Documents/MyGame/MyDataFile.whateverIFeelLikeAsLongAsItsConsistent")
のようになります。
「XMLが暴力のようなものであると言われています。少しは、より多くのを使用し、問題が解決しない場合は。」 – banjollity
100%ack XMLを使用する場合は、 – schnaader
@schnaader thedailywtf.comの将来の登場人物がその.. ..の作者を待っています! – banjollity