Richtige Maps erstellen.

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

paD

Betreff: Richtige Maps erstellen.

BeitragSa, Aug 27, 2005 1:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Kann mir jemand sagen wie ich mit Blitz3D eine "Datei"-Map erstelle.
Ich habe nun schon oft gehört und gelesen das ich für ne gute und gescheite Map eine Datei brauche und die nicht z.b. in einem Mesh gemacht wird. Aber wie sieht so eine Datei aus? Ich habe mir das ganze ca. so gedacht:

obj=baum1.3ds
x=15
y=7
z=23
obj=map01.3ds
x=0
y=0
z=0
.....

nur ich bekomm es irgendwie nicht hin die vernümpftig auszulesen..kann mir da jemand weiter helfen?

paD
http://www.spaceman-world.de

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Aug 27, 2005 2:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich verstehe deine Frage nicht ganz, aber denoch versuche ich zu interpretieren... In einer *.3ds -Datei können breits Bäume und andere Objekte vorhanden sein! Willst du sie denoch separat laden, dann schreibe eine Funktion die das für dich erledigt. Es kann von mir aus auch eine Textdatei sein in welcher die Positionen der Objekte gespeichert sind. Lädst du dann ein Level, dann lädst du eigentlich deine Datei (Beispielsweise: Level_01.dat) aus, wo Informationen geschrieben stehen: Lade map01.3ds und positioniere an XYZ, lade baum1.3ds und positioniere an XYZ, Levelende.

Falls du ein Terrain (per CreateTerrain) erstellst, dann kann man auch die Positionen der Objekte in die Highmap integrieren. Ich glaube mal gelesen zu haben, daß der Highlevel des Terrains aus einer highmap.bmp nur die Farbe rot ausgelesen wird. Ist das wirkich so, dann kann man die beiden übrigen Farben für zB Objektart (Baum, Gebüsch, Fels...) und Eigenschafften (wie besonders stachelig, flauschig...) verwenden. Die restlichen Farben müssten dann aber per ReadPixel aus der highmap.bmp ausgelesen, ausgefiltert und wenn Farbe nicht 0, dann in eine Funktion springen wo die Objekte geladen und positioniert werden.
 

paD

BeitragSa, Aug 27, 2005 2:59
Antworten mit Zitat
Benutzer-Profile anzeigen
hectic hat Folgendes geschrieben:
Ich verstehe deine Frage nicht ganz, aber denoch versuche ich zu interpretieren... In einer *.3ds -Datei können breits Bäume und andere Objekte vorhanden sein! Willst du sie denoch separat laden, dann schreibe eine Funktion die das für dich erledigt. Es kann von mir aus auch eine Textdatei sein in welcher die Positionen der Objekte gespeichert sind. Lädst du dann ein Level, dann lädst du eigentlich deine Datei (Beispielsweise: Level_01.dat) aus, wo Informationen geschrieben stehen: Lade map01.3ds und positioniere an XYZ, lade baum1.3ds und positioniere an XYZ, Levelende.

genau so mein ich das, aber ich bekomm solch eine datei nicht ausgelesen und dabei brauch ich hilfe ^^

paD
http://www.spaceman-world.de
 

Dreamora

BeitragSa, Aug 27, 2005 3:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist recht einfach.
Einfach mit Readstring oder ReadLine einlesen und entsprechend verarbeiten.

Das Parsen der Daten ist nicht schwer (einfach per mid den String durchgehen und nach etwas bestimmten suchen zb) ...

und dann halt afür sorgen, dass erzeugt wird, was in der File steht ...
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

paD

BeitragSa, Aug 27, 2005 3:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Crying or Very sad das versuch ich die ganze zeit zu erkären das ich das nicht kann und ich evt. da mal einen code bräuchte.. Smile

paD
http://www.spaceman-world.de
 

Dreamora

BeitragSa, Aug 27, 2005 3:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Möchtest du programmieren?
Dann solltest du dich vielleicht ein wenig anstrengen.

Es gibt hier verschiedene Beispiele fürs parsen von textdateien und mit der geschriebenen Anleitung oben sollte das eigentlich kein Problem sein, aber nochmal ein wenig ausführlicher.

Pseudocode:

Datei öffnen
While "Nicht am Ende der Datei"
lese nächste Zeile
Untersuche den String nach einem bekannten Befehl
Verhalte entsprechend Befehl (zb objekt laden und kommende 3 Zeilen auslesen als Position)
wend
Datei schliessen

In Befehlen heisst das mehr oder weniger OpenFile, CloseFile, ReadLine, Mid und Select - Case - EndSelect

Damit solltest du eigentlich dein Problem lösen können
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

paD

BeitragSa, Aug 27, 2005 12:14
Antworten mit Zitat
Benutzer-Profile anzeigen
ich weiß wie ich eine datei zeile für zeile einlese, aber dann bekomm ich immernoch nicht den inhalt umgewandelt..wenn in der datei z.b. steht:

obj=baum1.3ds
x=20
y=15
z=2

jetzt muss ich ja irgendwie dieses object auch an der stelle positionieren..und das bekomm ich nicht hin.

kann mir da nicht jemand elfen?
http://www.spaceman-world.de

theotheoderich

BeitragSa, Aug 27, 2005 13:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Pseudocode:
Auslesen
obj=baum1.3ds

Objekt laden (tx und ty sind Koordinaten einer Tilemap; kann man mit Types machen)
baum(tx,ty)=LoadMesh("baum1.3ds")

Objekt positionieren
PositionEntity baum(tx,ty),x,y,z

...und das für jede Zeile, schreib am Besten Funktionen die das laden und positionieren übernehmen.
Gruß
TheoTheoderich
--
The box label said, "Requires Windows XP or better.", so I bought an Amiga Computer.

eleXity

ehemals "BlackProgrammer"

BeitragSa, Aug 27, 2005 13:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi

Hier mal ein Kleiner Denkanstoss

BlitzBasic: [AUSKLAPPEN]


Graphics3D 640, 480, 16, 2
SetBuffer BackBuffer()

cam = CreateCamera()
PositionEntity cam, 0, 0, -5

light = CreateLight()

PerseScript(\"Lever1.dat\")

While Not KeyHit(1)
Cls

RenderWorld
UpdateWorld

Flip
Wend
End

Function PerseScript(File$)

If Not FileType(File$) ; Existiert die Map ?
RuntimeError \"Konnte \" + File$ + \" nicht laden !\"
End If

In = ReadFile(File$) ; Map Öffnen
While Not Eof(In) ; Map bis zum ende durchgehen

CrLine$ = Trim(ReadLine(In))

If Left(Lower(CrLine$), 7) = \"loadenv\"

pos = Instr(CrLine$, \"=\")
If pos > 1
DebugLog Trim(Right(CrLine$, (Len(CrLine$)-pos))) ; Datei Laden
End If

X$ = Trim(ReadLine(In))
Y$ = Trim(ReadLine(In))
Z$ = Trim(ReadLine(In))

DebugLog X$
DebugLog Y$
DebugLog Z$

End If

Wend
CloseFile In

End Function



Und die Lever1.dat

Code: [AUSKLAPPEN]

LoadEnv   = Cube.3ds
PosX   = 0
PosY   = 0
PosZ   = 0

LoadEnv   = Cube.3ds
PosX   = 0
PosY   = 0
PosZ   = 0


MFG
nVidia 570GTX | AMD Phenom II X6 | 8 GB RAM | 1TB | Win 7 Ultimate 64 SP1 | B3D, BMAX, BP, C#

Projekt : Worklog
 

Dreamora

BeitragSa, Aug 27, 2005 13:48
Antworten mit Zitat
Benutzer-Profile anzeigen
~VERSCHOBEN~

Da dem Schreiber scheinbar noch nicht mal Positionieren als solches klar zu sein scheint, definitiv für den Anfängersektor
Dreamora
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group