[B3D] laden von einer Map aus einer *.txt
Übersicht

shootermakerBetreff: [B3D] laden von einer Map aus einer *.txt |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
kann mir jemand ein Beispiel posten, wie ich am besten eine 3d map aus einem *txt laden kann. also vorgestellt hätte ich mir das so wie bei dem PC-gamel "Dungeon Keeper 2". Da besteht eine map nur aus einem Text-file wie zum bleistift: AAAAAAAAAAAA ACCCCCCCCCA ACCCCCCCCCA ACCCCCCCCCA ACCCCCCCCCA ACCCCCCCCCA ACCCCCCCCCA AAAAAAAAAAAA A ist dann z.b. ein Block C ein dreieck doch ich weiß irgendwie nicht wie ich das realisieren soll, also das der mir dann das file liest und dann sich denkt: "aha! da ist ein A, da muss ich einen Block erstellen... ![]() ![]() |
||
JanK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
1. Datei in einen String einlesen
2. Jedes Zeichen im String durchgehen und am besten mit einer Select-Abfrage entschieden was er jetzt erstellen soll. -----Edit:--------- BlitzBasic: [AUSKLAPPEN] ;-----[--Datei öffnen--]----- |
||
Ich habe keine Zeit, mich zu beeilen.
The Pollux Conflict || The Pollux Renegades || Lipstick-live.de |
shootermaker |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
zuerst danke für deine Hilfe + Beispiel! ![]() also so weit versteh ich die Sache noch, aber wie müsst ich jetzt vorgehen, wenn ich das dann in 3D haben möchte? ;-----[--Datei öffnen--]----- Map = ReadFile("Map01.txt") ;-----[--Datei auslesen--]----- Inhalt$ = ReadLine$(Map) ;-------[--Dateien auswerten--]--------- For x = 1 To Len(Inhalt$) ;Vom 1 Zeichen bis zum Text Ende Zeichen$=Mid$ (inhalt$, x,1) ;Das wichtige...der Mid befehl Select Zeichen$ ;Selectabfrage Case "A" ;---------------------------------------------------------------------> Kann ja hier nicht einfach das model laden, weil er ja dann nur eins macht... LoadMesh("block.3ds") Case "C" LoadMesh("boden.3ds") End Select Next ;----------------------------------------- WaitKey ;-> Damit man alles sieht ...sry, hab in dem bereich leider nix mit der Suchfunktion gefunden. Leider auch keine Tutorials die über so ein Thema handeln. |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Siehe dazu ql:CopyEntity und ql:CopyMesh, diese sollten für deine Ansprüche genügen... Ansonsten auch ql:AddMesh je nachdem, wie du deine Grafik aufbauen willst... | ||
shootermaker |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hallo,
danke für deine Antwort! ![]() aber die frage war eigentlich anders gemeint (sry, hab sie blöd formuliert ![]() ich meinte eigentlich: „wie kann ich es anstellen, dass er die Models nacheinander an der richtigen Position erstellt?“ hab mir in dem Bereich schon viele tutorials in 2d angeschaut, aber 2d/3d ist da ein großer unterschied. |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hmm, ok... Da du aus einer Datei ausliest, 'kennst' du ja schon die Position der Objekte. Dazu gibt es zwei Möglichkeiten:
1.) Man erstellt eine Datei wo jedes Objekt mit einer Kennung und derer Position gespeichert ist. 2.) Man erstellt eine Datei die 2D-mässig (Map ähnlich) schon gespeichert worden ist. Die Position ergibt sich dann aus der Dateiposition und es wird nur noch die Kennung eines Objektes gespeichert. Du hast dich wohl für die zweite Möglichkeit entschieden. Dir fehlt aber noch die Y-Variable um damit rechnen zu können. Ausserdem läuft deine Schleife ja nur einmal durch und liest dadurch nur die erste Zeile der Datei aus. Das kannst du mit einer ql:EOF -Schleife lösen. Vor dieser Schleife setzt du eine y-Variable auf 0. Innerhalb der Schleife erhöhst du jeden Schleifendurchlauf y um 1, um die Position des Meshes herraus finden zu können, könnte man wie folgt vorgehen: on the fly Code: [AUSKLAPPEN] ;Level Laden
Map = ReadFile("Map01.txt") FreeEntity Welt y=0 While Not Eof(Map) y=y+1 Inhalt$ = ReadLine$(Map) For x = 1 To Len(Inhalt$) Zeichen$=Mid$ (inhalt$, x,1) Select Zeichen$ Case "A" PositionMesh block,x,y AddMesh block,Welt Case "B" PositionMesh boden,x,y AddMesh boden,Welt Case "C" PositionMesh zeug,x,y AddMesh zeug,Welt Next Wend CloseFile (Map) Das laden der Meshes übernimmst du dann am Anfang deines Programmes und machst sie zB mit ql:HideEntity unsichtbar. Bitte, zur besseren Übersicht, Code-Tags benutzen. |
||
shootermaker |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hi,
hab den code gleich ausprobiert, aber so ganz funktioniert er noch nicht. [img]http://img145.imageshack.us/my.php?image=blitz3dprob1po.jpg[/img] die txt-datei sieht so aus: AAAAAAAAAAAA ACCCCCCCCCA ACCCCCCCCCA ACCCCCCCCCA ACCCCCCCCCA ACCCCCCCCCA AAAAAAAAAAAA der momentane code: Code: [AUSKLAPPEN] Map = ReadFile("Map01_test.txt") y=0 block = LoadMesh("media/wcrate1.3ds") boden = LoadMesh("media/wcrate1.3ds") Welt = LoadMesh("media/wcrate1.3ds") HideEntity block HideEntity boden ;HideEntity welt ;FreeEntity Welt While Not Eof(Map) y=y+1 Inhalt$ = ReadLine$(Map) For x = 1 To Len(Inhalt$) Zeichen$=Mid$ (inhalt$, x,1) Select Zeichen$ Case "A" PositionMesh block,x,y,z AddMesh block,Welt Case "C" PositionMesh boden,x,y,z AddMesh boden,Welt End Select Next Wend CloseFile (Map) ich musste das "hideentity welt" auskommentieren, denn sonnst hat sich überhaupt nix getan und "FreeEntity Welt", denn sonnst bekam ich die Fehlermeldung "entity does not exist" wobei ich nicht ganz verstehe wofür das "welt"-entity gut sein soll |
||
![]() |
5k41 |
![]() Antworten mit Zitat ![]() |
---|---|---|
du fürgst alle objekte in deinem Code dem hauptentity Welt zu, damit du nur eine Surface hast! | ||
Projekte:
For a better World - Gesellschaftsspiel ( 100%) User posted image |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group