Arrays mit Terrain nutzen?

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

OnkelManfred

Betreff: Arrays mit Terrain nutzen?

BeitragSo, Nov 23, 2008 1:30
Antworten mit Zitat
Benutzer-Profile anzeigen
hallo
ich hab da mal ne frage. und zwar: ich hab mir mal das codebeispiel modify terrain angeschaut. dort kann man ja die höhe des terrains beliebig verändern, etc.
ist es möglich, die einzelnen höhen des terrains in einem array zu speichern? wenn ja wie sollte man das umsetzen? hier nochmal der code:

Code: [AUSKLAPPEN]
; Terrain erhöhen/senken
marker_y#=TerrainHeight(terra,marker_x,marker_z)
If KeyDown(42)=True
If marker_y#<1 Then marker_y#=marker_y#+0.005
ModifyTerrain terra,marker_x,marker_z,marker_y#
EndIf
If KeyDown(29)=True
If marker_y#>0 Then marker_y#=marker_y#-0.005
ModifyTerrain terra,marker_x,marker_z,marker_y#
EndIf


könnt ihr mir vielleicht weiterhelfen?
 

OnkelManfred

BeitragSo, Nov 23, 2008 2:37
Antworten mit Zitat
Benutzer-Profile anzeigen
OK, problem hat sich gelöst. man muss einfach das schon vorhandene (Idea) array überprüfen: und zwar mit dem befehl TerrainHeight(terrain,x,z)
die ausgelesenen daten können dann noch in eine einfache for/next-schleife eingebunden werden:
Arrow
Code: [AUSKLAPPEN]

If KeyHit(28) Then
terrainfile=WriteFile("höhe.dat")
For x=0 To terrain_size-1
   For z=0 To terrain_size-1
   WriteLine(terrainfile,TerrainHeight(terrain,x,z))
   Next
Next
EndIf


eigentlich ein ganz einfaches problem Very Happy

erklärung:
das terrain_size-1 entsteht dadurch, dass man sonst bei einer terraingröße von 16x16 feldern die koordinaten des 17. feldes ebenfalls in die datei mit reinschreiben würde.

allerdings ergibt sich dann ein vielleicht unwichtiges problem: anstatt z.B. den wert 0.5 in die datei zu schreiben, schreibt das programm einen wert von 0.498039. ich denke, dass dies aber eher unwichtig ist, da der wert eh kaum wahrnembar verändert wird.

den wert von WriteLine könnte man natürlich genausogut wieder auslesen:
Arrow
Code: [AUSKLAPPEN]

If KeyDown(59) Then
filein=ReadFile("höhe.dat")
For x=0 To terrain_size-1
   For z=0 To terrain_size-1
   hoehe_in=ReadLine(filein)
   ModifyTerrain terrain,x,z,hoehe_in
   Next
Next
EndIf


oder kurz: wenn die taste [F1] gedrückt wird, liest der computer die werte in der datei aus und verändert somit direkt Exclamation die koordinaten auf dem terrain. ich hoffe diese erklärung konnte euch helfen.

mfg
OnkelManfred

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSo, Nov 23, 2008 3:01
Antworten mit Zitat
Benutzer-Profile anzeigen
ReadLine ist für Text gedacht. Was du benutzen solltest ist WriteByte für das Terrain, da es eh nur 256 verschiedene Höhenstellungen haben kann. Falls du aber keine Umrechnung machen willst, kannst du auch WriteFloat benutzen. Im übrigen würde ich für ein Terrain lieber eine Bank nehmen und diese dann nur Byteweise bearbeiten.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

OnkelManfred

BeitragSo, Nov 23, 2008 3:31
Antworten mit Zitat
Benutzer-Profile anzeigen
ok geht aber so auch
war auch nur nen flüchtigkeitsfehler Very Happy

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group