Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Zendee

unregistriert

1

14.03.2012, 19:15

Java und C# Game Engine für Android

Für unsere kleine Game Engine in Java (der Editor ist in C#) haben wir uns überlegt ein eigenes Dateiformat für die Szenen anzulegen. Leider haben wir keinen Plan wie das Funktionieren könnte. Hat jemand Tipps?

2

14.03.2012, 19:21

Habt ihr mal daran gedacht evtl. XML zu benutzen?
Das wird von Java und C# (bzw .NET) hervorragend unterstützt und bietet ein hohes Maß an Flexibilität.

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

3

14.03.2012, 19:29

Zitat

Das wird von Java und C# (bzw .NET) hervorragend unterstützt und bietet ein hohes Maß an Overhead.

Bitte nicht falsch verstehen. ^^
Besonders in der Entwicklungsphase benutze ich selber häufig XML.
Aber in einem richtigen Programm nur für die Settings.
Richtige Daten werden derart aufgebläht, da lob ich mir doch das guten alten Binärformat. ;)

Vorallendingend wenn du auch andere Daten wie Audio oder Grafik mit in der Datei speichern willst, bist du mit XML am Ende.

Zendee

unregistriert

4

14.03.2012, 19:29

Okay..danke für die Antworten! :)
Leider habe ich meinen Teamkollegen falsch verstanden,
und es ging darum,wie man ein Level aus so einer XML lädt,
bzw. dann löscht und einme neues Level lädt..
Es wäre nett wenn ihr ein kurzes Codestück mit Pseudocode
oder einen Link zu dem Thema bereitstellt.

Danke ;)

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Zendee« (14.03.2012, 19:50)


5

14.03.2012, 19:54

Vorallendingend wenn du auch andere Daten wie Audio oder Grafik mit in der Datei speichern willst, bist du mit XML am Ende.

Da wir hier von Android sprechen werde ich dieses Argument mal widerlegen :)
Bei den meisten Android-Apps werden alle Ressourcen in der *.apk gespeichert, daher ist es gar nicht nötig komplette Ressourcen in einem Dateiformat zu speichern, da Android es sowieso schon macht.

[...] da lob ich mir doch das guten alten Binärformat.

Zu diesem Thema wurde erst kürzlich eine Diskussion geführt.

Ansonsten hast du natürlich recht, dass XML einen gewissen Overhead mit sich bringt.
Jedoch sollte man sich fragen ob es sich wirklich lohnt ein eigenes (und komplexes) Dateiformat zu entwickeln, wenn man doch einfach XML benutzen kann.
Und so groß ist der Overhead nun auch wieder nicht. Man sollte nur darauf achten welche Art von Parser man verwendet ;) :)

EDIT: Also das ist im Prinzip relativ simpel. Man muss im Prinzip das Level neu "initialisieren".

Quellcode

1
2
3
level.loadFromXml(level1.xml)
...
level.loadFromXml(level2.xml)

Dabei sollte man darauf achten intern alle Objekte wieder los zu werden (oder reseten z.B. den Spieler) und dann wieder alles neu aufzubauen.
So würde ich es machen. Habe jetzt noch nicht so viel Erfahrung mit Android und muss daher gestehen, dass ich nicht weiß ob es optimal ist :)

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von ».:!Batzer!:.« (14.03.2012, 20:01)


Zendee

unregistriert

6

14.03.2012, 20:17

Ja,danke erstmal. Leider weiß ich jetzt immer noch nicht genau wie dieses Löschen oder neu Initialisieren aussieht

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

7

14.03.2012, 20:26

Zitat

Und so groß ist der Overhead nun auch wieder nicht.

Quellcode

1
<GameField Width = "33343" Height = "9876">

Kostet in Unicode 82 Bytes Speicher.
Direkt gespeichert maximal 8 Bytes. (2 * uint(4 Byte))

Das ist mehr als das zehnfache. (!!!)

Am Anfang ist XML wie gesagt ne feine Sache.
Nur den Loader sollte man schön kapseln, damit man später noch auf eine anderes Format umsteigen kann.

Zitat

und es ging darum,wie man ein Level aus so einer XML lädt

Na du hast halt dein Datei und liest dann Stück für Stück ein und erstellt die dazu gehörenden Spielobjekte.

Trivialbeispiel: ("Gamefield" das Spielfeld und "Enemies" eine Liste der Feinde.)

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
XmlNode Node = XMLdoc.SelectSingleNode("GameField"); //Spielfeldknoten raussuchen 
this.GameField = new Gamefield(int.Parse(Node.Attribute["Width"].Value), int.Parse(Node.Attribute["Height"].Value))) //Spielfeld bestimmter Größe erstellen
XmlNodeList EnemyNodes = Doc.SelectNodes("Enemies\Enemy"); //Feinde Knoten in der XML-Datei auflisten
this.Enemies = new LinkedList<Enemy>(); //Neue Liste mit Feinden
foreach (XmlNode EnemyNode in EnemyNodes)
{
     Enemy NewEnemy = new Enemy(Enum.Parse(EnemyNode.Attributes["Type"].Value)); //Neuen Feind eines bestimmten Types
     NewEnemy.X = int.Parse(Node.Attributes["X"].Value); //Position einlesen
     NewEnemy.Y = int.Parse(Node.Attributes["Y"].Value);

     XmlAttribute WeaponAttr = EnemyNode.Attributes["Weapon"]; //Waffe auslesen
     NewEnemy.Weapon = WeaponAttr == null ? Weapons.ChewingGum : Weapons.Parse(WeaponAttr.Attributes.Value); //Wenn Waffe nicht festgelegt, Standardwaffe verwenden (Kaugummi :))
     this.Enemies.Add(NewEnemy);
}


Alternativ könntest du auch das XML serialisieren. Ganz für den Anfang würde ich aber davon die Finger lassen.

PS: Ein bisschen finde ich die Frage wie: "Wie programmiere ich ein Computerspiel?"
Wenn du bereits ein bisschen Programmstruktur hättest, denke ich, sollte das sowieso klar sein.

EDIT: Mal noch ein Kommentare im Programmcode hinzugefügt.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Spiele Programmierer« (14.03.2012, 20:38)


Noctarius

Treue Seele

Beiträge: 120

Wohnort: Düsseldorf

Beruf: Manager of Developer Relations at Hazelcast, Inc. & Consultant for Scaleable Gameserver Systems

  • Private Nachricht senden

8

14.03.2012, 20:33

Ich würde spontan auch eher zu einem Binärformat tendieren, wobei es (solange keine Datentransporte über ein Netzwerk stattfinden) es nur bedingt wichtig ist ob du 8 oder 20Byte brauchst.

9

14.03.2012, 20:41

Leider weiß ich jetzt immer noch nicht genau wie dieses Löschen oder neu Initialisieren aussieht

Das können wir dir leider nicht sagen, da wir nicht wissen wie ihr eure Level aufbaut, welche Objekte es gibt und wie sie in der Welt platziert werden, ...

[...] wobei es (solange keine Datentransporte über ein Netzwerk stattfinden) es nur bedingt wichtig ist ob du 8 oder 20Byte brauchst.

So sehe ich das eben auch.
Klar ist es immer schöner kleinere Dateien zu haben, jedoch kommen einem dann ganz andere Probleme entgegen (siehe Diskussion).

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

10

14.03.2012, 20:45

Zitat

wichtig ist ob du 8 oder 20Byte brauchst.

Ich finde das ist gennerell eine schlechte Einstellung.
Spieldaten werden meist aber zwei oder dreidimensional abgelegt, weshalb auch der Speicherverbrauch quadratisch\kubisch zu nimmt.

100 Bytes pro Feld bei 200² Gebiet:
200*200*100Byte= 4MB

Ich glaube übrigens kaum das mam ein Feld in einem durchschnittlichen Spiel mit 100 Bytes in XML mit vernümpftigen Attribut-\Knotennamen speichern kann.

Bei Konfigurationsdateien zb. ist das eben wirklich zu vernachlässigen, weshalb man sich da ohne größere Bedenken auf XML stürzen kann. :)

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Spiele Programmierer« (14.03.2012, 20:54)


Werbeanzeige