Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Zyrian Super JLI'ler
Anmeldedatum: 30.08.2003 Beiträge: 321 Wohnort: Essen Medaillen: Keine
|
Verfasst am: 04.04.2004, 12:07 Titel: Tutorial zu Leveleditor |
|
|
Hi,
da ich selber keinen Ansatz dafür hab, wollt ich fragen, ob ihr vielleicht ein Tutorial für eine Art 2D-Leveleditor kennt. Geht nur um die Grundzüge, also wie sich das generell realisieren lässt usw. Dass ich das komplett nachher anpassen muss is sowieso klar.
Hat jemand was?
MFG
Chris _________________ Schau mir in die Augen, Kleines. |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 04.04.2004, 13:03 Titel: |
|
|
Ich hab schon des öfteren 2D Leveleditoren programmiert. Die Farge ist: Was für ein 2D Spiel?
Du müstest erst einmal wissen, was du für eine Engine benuzt. In einem jump and Run kannst du das Level z. B in ein Array speicher:
00000000000
00xxx000000
00xxxxxxxxx
so z. B.
Oder du kannst einzelne Objekte mit ihrer Position speicher:
3 Block an 3, 3
8 Block an 3,4
damit legst du dann das Dateiformat fest. Und den Eidotr musst du dann für das Dateiformat entsprechend porrgrammieren.
Schreibt doch einfach mal genau, wie das Spiel aussehen soll, dann kann ich dir sagen, wie ich es umsetzten würde. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
Zyrian Super JLI'ler
Anmeldedatum: 30.08.2003 Beiträge: 321 Wohnort: Essen Medaillen: Keine
|
Verfasst am: 04.04.2004, 18:34 Titel: |
|
|
Danke für die schnelle Antwort (:
Also, ->hier<- ist ein Screenshot aus meinem aktuellen Projekt, was noch in einem sehr frühem stadium ist.
Bisher hab ich die karte mit so einer datei geladen:
Code: |
g1 g1 g1 w1 w2 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 #
g1 g1 g1 w1 w2 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 #
g1 g1 g1 w1 w2 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 #
g1 g1 g1 w1 w2 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 #
g1 g1 g1 w1 w2 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 #
g1 g1 g1 w1 w2 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 #
g1 g1 g1 w1 w2 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 #
g1 g1 g1 w1 w2 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 #
g1 g1 g1 w1 w2 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 #
g1 g1 g1 w1 k1 w3 w3 w3 w3 w3 w3 w3 w3 w3 w3 w3 #
g1 g1 g1 k2 w4 w4 w4 w4 w4 w4 w4 w4 w4 w4 w4 w4 #
g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 #
g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 #
g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 #
g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 #
g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 #
g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 #
g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 #
g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 #
g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 #
g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 #
g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 #
g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 #
g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 #
g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 #
|
und objekte hab ich in einer weiteren datei so gesetzt:
Code: |
#
Tr 4 <-- Art des Objekts mit Anzahl
232 111 <-- Koordinaten
1500 1000
789 987
1005 666
#
Br 2
70 80
100 100
#
St 3
1026 456
402 568
800 544
#
|
MFG
Chris _________________ Schau mir in die Augen, Kleines. |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 04.04.2004, 20:54 Titel: |
|
|
Hast du eine Text oder eine Binärdatei?
Ich würds mit ner Binärdatei machn:
Code: |
char Level[100][100];
char Tile="g";
if(Mausklick)
{
Level[CursorX/32][CursorY/32]=Tile;
}
if(Taste "1")
{
Tile="g";
}
if(Taste "2")
{
Tile="w"
}
|
Die Mausposition durch 32 zu teilen ist erforderlich, damit du das richtige Kästchen erwischts (wenn diese 32x32 groß sind)
fürs speicher dann einfach:
Code: |
FILE* Datei=fopen("level1.lev", "w");
fwrite(&Level, sizeof(Level), 1, Datei);
fclose(Datei);
|
Die Ladenfunktion sieht genauso aus nur mit fread()
Wenn du jetz noch die Objetke in die Datei haben willst:
Im Editor würde ich eine STD Liste machen:
Code: | struct Objekt
{
int XPos;
int YPos;
int Typ
}
list<Objket> Objektliste
|
Du speicherst dann einfach in einer int-Varaiable, was für ein Objekt erstellt wird (ähnlich wie char Tile). Dann z. B. bei rechten Mausbutton, erstellst du das Objekt:
Code: |
Objekt nObjekt;
nObjekt.XPos=CursorX;
nObjekt.YPos=CursorY;
nObjekt.Typ=Typ;
Objektliste.push_Bakc(nObjekt)
|
Diese Liste musst du dann mit in die Leveldatei schreiben:
Als erstes schreibst du die größe (Objektliste.size()) ind ie Datei, dann gehst du die Liste durch und schreibst mit fwrite() jedes einzelne Objekt aus der Liste in die Datei. Beim laden liest du als erstes wieder die Größe der Liste und gehst dann in einer Schleife in der Datei weiter.
Die Dateistruktur sieht dannn folgendermaßen aus:
char Levle[100][100];
int Anzhal Objekte;
Objekt[AnzahlObjekte]
du kannst natürlich auch für jeden Objekttyp eine eigene Liste machen. Du must nur am Anfang die Größe der Liste speichern, da du ja nich mit feof() Testen kannst, ob die Datei zu ende ist, wenn die Objektliste nicht bis zum ende der Datei reicht. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
Zyrian Super JLI'ler
Anmeldedatum: 30.08.2003 Beiträge: 321 Wohnort: Essen Medaillen: Keine
|
Verfasst am: 04.04.2004, 21:26 Titel: |
|
|
Thx für die Hinweise. Sieht richtig gut aus (:
Hast du deine Editoren mit MFC gemacht oder mit der WinAPI? _________________ Schau mir in die Augen, Kleines. |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 04.04.2004, 22:41 Titel: |
|
|
Weiß nicht so genau:
WinAPI ist doch so ne Srt komischer Assistent, mit dem man nervige Sachen wie Fenster erstellen und so machen kann.
Und MFC ist das ganz normale Visual C++?
Ich hab jedenfalls alles mit VC++
Projekt->Neu->LeeresProjekt
und dann alles selbst eingegeben. (den Quellcode der WinMain hab ich aus dem Buch) _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
Zyrian Super JLI'ler
Anmeldedatum: 30.08.2003 Beiträge: 321 Wohnort: Essen Medaillen: Keine
|
Verfasst am: 04.04.2004, 22:50 Titel: |
|
|
Also MFC ist dieser "komische Assistent" der einem so die Grundklamotten wie die Fenstererstellung abnimmt und wo man per Drag&Drop Schaltflächen, Beschriftungsfelder etc. setzen kann, und die dann später im Code mit einer Funktion belegen kann.
Die WinAPI ohne MFC ist das, womit du das wohl immer gemacht hast, also direkt per Codeeingabe und nicht mit vorigem Design des Dialogfensters bzw. SDI oder MDI Anwendung.
#C _________________ Schau mir in die Augen, Kleines. |
|
Nach oben |
|
|
KI JLI Master
Alter: 39 Anmeldedatum: 04.07.2003 Beiträge: 965 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 04.04.2004, 22:53 Titel: |
|
|
Jonathan_Klein hat Folgendes geschrieben: | Weiß nicht so genau:
WinAPI ist doch so ne Srt komischer Assistent, mit dem man nervige Sachen wie Fenster erstellen und so machen kann.
Und MFC ist das ganz normale Visual C++?
Ich hab jedenfalls alles mit VC++
Projekt->Neu->LeeresProjekt
und dann alles selbst eingegeben. (den Quellcode der WinMain hab ich aus dem Buch) | Dann benutzt du augenscheinlich kein MFC.
Wenn du sagst, dass du den Code selber schreibst.
Wenn man ein neues Projekt anfängt, kann man sich aussuchen, was es werden soll. Unter anderem auch MFC AppWizard...
In Visual C++ gibt es nämlich einen Haufen Assistenten(Klassenassistent...), die einem bei der MFC-Programmierung unter die Arme greifen.
Ich mag aber kein MFC, weil es manchmal ziemlich umständlich sein kann auf manche Funktionen zuzugreifen.
Ich find die "normale" Win 32 Programmierung einfacher. |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 04.04.2004, 22:57 Titel: |
|
|
OK
ich hab mich damit halt noch nie befasst.
Ich benutze immer Win-32 Anwendung und dann Leeres Projekt _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
KI JLI Master
Alter: 39 Anmeldedatum: 04.07.2003 Beiträge: 965 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 04.04.2004, 23:00 Titel: |
|
|
Zyrian hat Folgendes geschrieben: | Also MFC ist dieser "komische Assistent" der einem so die Grundklamotten wie die Fenstererstellung abnimmt und wo man per Drag&Drop Schaltflächen, Beschriftungsfelder etc. setzen kann, und die dann später im Code mit einer Funktion belegen kann.
| Man kann bei der Win 32 Programmierung (ohne MFC) auch Dialog-Ressourcen für sein Programm verwenden.
Einfach ein Dialogfenster als Ressource dem Projekt hinzufügen.
Dann designen.
dann dann per CreateDialog während der Initialisierung laden.
Natürlich muss der MessageHandler noch entsprechend eingerichtet werden....
Ist aber im Prinzip ganz einfach. |
|
Nach oben |
|
|
Zyrian Super JLI'ler
Anmeldedatum: 30.08.2003 Beiträge: 321 Wohnort: Essen Medaillen: Keine
|
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 05.04.2004, 08:32 Titel: |
|
|
Buddy Jesus aus Dogma ;D
MFC ist die Abkürzung für Microsoft Foundation Classes. Das ist ein Haufen von Wrapperklassen für alle möglichen WinAPI Funktionen. Meiner Meinung nach zu groß, unübersichtlich und überladen. _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 05.04.2004, 08:50 Titel: |
|
|
Wir sollten vieleciht nicht zu sehr vom Thema abschweifen. Was ich ehrlich gesagt ein bisschen komisch finde, ist das so viele Threads immer wieder vom Thema abkommen. Wenn wir uns über MFC unterhalten wollen, sollten wir einen neuen Thread veröffentlichen und in diesem nur die Frage über den Leveleditor klären.
Ich finde dieses Forum sehr gut aber meine, das es durch unnötige Abschweifungen ein bisschen unübersichtlich ist. Das hier ist ein Forum, kein Chatroom.
(nicht böse sein, ist nur meine Meinung) _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 05.04.2004, 09:03 Titel: |
|
|
Ja du hast natürlich recht aber wenn du dir mal anschaust wieviele _aktive_ Mitglieder wir nur haben ist das schon in Ordnung. Es wird wenig gepostet und ich denke mal, dass jeder jeden Thread gut mitlesen kann.
Zum Editor: Ich würde in der Entwicklungsphase die Dateien im Textformat abspeichern. Da lassen sich einfacher Bugs finden und kleine Änderungen vornehmen. Später solltest du sie aber binär speichern weil sie sonst zuviel Platz wegnehmen. _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 05.04.2004, 10:18 Titel: |
|
|
Meinst du Bugs von der Sorte, das die Speicherfunktion die Datei nicht richtig speichert? Und das man um das zu überprüfen einfach die Textdatei öffnet und sieht, was er da für einen Blödsinn reingeschrieben hat?
Naja, is vieleicht nützlich aber wenn man später auf Binärdateien umsteigt, muss man doch die Speicher und Ladenfunktion neu schreiben. Ist ja schon ein kleiner Unterschied. Und dann weiß man wieder nicht, ob die jetztkorrekt arbeitet. Von daher finde ich es unsinnig, schon zu Planen mitten in der Entwicklung das Levelformat zu ändern. Ich würd direkt Binär nehmen.
Wenn du so Bugs meinst, bei denen man Fehler beim Levelbauen hatte: Man sollte im Editor vieleicht einfach ein paar Funktionen einbauen, mit denen man die einfach beheben kann. Also komfortabler als im Texteditor.
Den Vorteil von Textdateien sehe ich nur darin, dass man sie einfach mit dem Texteditor bearbeiten kann. Daher kann man sie gut nutzen um z. B. Textmeldungen oder so zu speichern. Denn dann müsste man ja um einen Editor für Textmeldungen zu programmieren quasi Notepad nachprogrammieren. Wenn man aber was anders als Texte speichern will, ist ein selbstprogrammierter Editor eigentlich immer komfortabler als Notepad.
Ich hab nur mal Text statt Binär benutz als ich keine Lust hatte erst einen Editor zu schreiben. Dann hab ich später auch nicht mehr auf Binär umgestellt. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
|