optimierung =S
Übersicht

![]() |
darthBetreff: optimierung =S |
![]() Antworten mit Zitat ![]() |
---|---|---|
hi...
ich hab n kleinen editor für mein spiel gebastelt (um kleine wäldchen schön zu platzieren...) Code: [AUSKLAPPEN] Dim baum(anz) ;bäumchen erstellen
baum(0)=LoadMesh("media\land\tree.x") PositionEntity baum(0),-500,0,-2000 ScaleEntity baum(0),.75,.75,.75 For wald=1 To anz baum(wald)=CopyEntity(baum(0)) EntityType baum(wald),3 Next dann platziert man die mit pfeiltasten... hin und her verschieben, wenn man enter drückt, dann wechselt man zum nächsten baum Code: [AUSKLAPPEN] If KeyHit(28) Then
baumx=EntityX(baum(f)) baumz=EntityZ(baum(f)) saved=WriteFile("editor"+f+".dat") WriteInt saved,baumx WriteInt saved,baumz CloseFile saved f=f+1 If f>anz Then f=0 EndIf die koordinaten werden gespeichert in einem file... so, das problem ist jetzt, dass ich für jeden baum ein eigenes file brauche, d.h.=> 100 bäume = 100 files, nervig! wie kann ich das optimieren? (wenn ich immer im selben file speichere werden die koos ja überschrieben...) geladen werden die bäume (im game) dann so: Code: [AUSKLAPPEN] For wald=1 To anz
baum(wald)=CopyEntity(baum(0)) open=ReadFile("editor"+f+".dat") baumx=ReadInt(open) baumz=ReadInt(open) CloseFile open PositionEntity baum(wald),baumx,0,baumz EntityType baum(wald),TREE_COL f=f+1 Next für optimierungsvorschläge wär ich sehr dankbar!!! |
||
Diese Signatur ist leer. |
![]() |
simi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Schau dir mal den Befehl ql:seekfile an.....
Mit dem kannst du den schreibpointer an das ende der datei legen... (tipp: ql:fILESIZE) ![]() |
||
![]() |
darthBetreff: oh danke!!! |
![]() Antworten mit Zitat ![]() |
---|---|---|
aaach!! danke für die antwort - son befehl hab ich gesucht!!!
(geht seekfile auch bei laden? in der OH stehts nur beim schreiben... => nö, scheinbar nicht... hat mir einer n tipp wie ichs laden soll??? gibt es ne möglichkeit das file anzuzeigen? (einfach so wie es geschrieben wurde) => OH: displayfile , kennt mein blitz aber nicht...) |
||
Diese Signatur ist leer. |
![]() |
darthBetreff: neue erkenntnis =S |
![]() Antworten mit Zitat ![]() |
---|---|---|
so... ich habs jetzt mal so probiert...
Code: [AUSKLAPPEN] f=0
open=ReadFile("editor_data.dat") anz=ReadShort(open) CloseFile open Dim baum(anz) Dim baumx(anz) Dim baumz(anz) open=ReadFile("editor.dat") ;irgendwo hier könnte der fehler sein For place=1 To anz baumx(place)=ReadInt(open) baumz(place)=ReadInt(open) Next CloseFile open baum(0)=LoadMesh("media\land\tree.x") PositionEntity baum(0),-500,0,-2000 ScaleEntity baum(0),.75,.75,.75 For wald=1 To anz baum(wald)=CopyEntity(baum(0)) Next .nochma If f<=anz Then PositionEntity baum(f),baumx(f),0,baumz(f) f=f+1 Goto nochma EndIf => er zeichnet mir aber nur 1 baum... und ich weiss nicht woran es liegt (theoretischer durchlauf) : versch. baum koos werden geladen : baum 0 wird erstellt, 1 bis anz bäume kopiere : wenn f<=anz denn positionier baum nr f auf der stelle baumx nr f und baumz nr ... was geht da net??? steckt der fehler beim speichern? Code: [AUSKLAPPEN] f=0
If KeyHit(28) Then baumx=EntityX(baum(f)) baumz=EntityZ(baum(f)) saved=WriteFile("editor.dat") SeekFile saved,(f*2) ;2stellen überspringen, da dort schon daten sind WriteInt saved,baumx WriteInt saved,baumz CloseFile saved f=f+1 If f>anz Then f=0 EndIf |
||
Diese Signatur ist leer. |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
WriteInt schreibt 4 Bytes nicht zwei, somit mußt du 4 Stellen überspringen und nicht 2. Ansonsten kannst du auf SeekFile beim speichern verzichten, da dies BB automatisch für dich macht. SeekFile ist sinnvoll, wenn du ein Dateiheader hast wo zu unterschiedlichen Zeiten, unterschiedliche Positionen beschrieben werden. Einen Dateiheader sehe ich aber in der editor.dat nicht. Du kannst dir aber einen kleinen basteln indem du auf die editor_data.dat verzichtest und die Anzahl der Bäume mit in die editor.dat schreibst. Ansonsten kannst du auch auf den Header verzichten und anstelle beim lesen der Datei die durch anz durchgezählt werden mit EOF (bedeutet: End Of File) solange Datei einlesen bis Dateiende erreicht ist...
Also kurz gesagt: Schreibe einfach mit WriteInt die Daten ohne SeekFile. Lese die Daten mit #While Not Eof(open) #;Daten einlesen mit ReadInt #Wend Oder mach wie du es für Richtig hällst, das oben genannte währe meiner Meinung nach die einfachste wenn nur Bäume einer Art gespeichert werden sollen. Wenn mehrere Arten gespeichert werden, dann kannst du mit zB Write/Read-Int/Byte die Art der Bäume/Sträucher/Steine... angeben. Oder du machst es etwas komplizierter und benutzt doch SeekFile mit einem Dateiheader wo drin steht auf welchen Positionsbereichen sich welche Arten von Bäumen etc. befinden. Die letztere würde ein paar Bytes pro Datei sparen. |
||
![]() |
darthBetreff: thx |
![]() Antworten mit Zitat ![]() |
---|---|---|
das mit den 4 bytes hatt ich vergessen... danke!
nein, auf das seekfile kann ich kaum verzichten (höchstens mit EOF) denn sonst würden die anderen daten ja überschrieben... (oder seh ich das falsch?) auf editor_data werd ich verzichten... =S muss wohl von der älteren version noch übrig geblieben sein... es ist nur 1 art bäume... ich speichere einfach ihre x und z koordinaten, damit ich die dann nachher so plazieren kann... danke für die antwort... ich werds (denk ich) mal tatsächlich mit dem EOF probieren... müsste klappen (auch wenn ich noch keine ahnung habe wie der befehl funktioniert ![]() => in der OH steht, dass EOF nur für open/read file funktioniert... das problem mit dem lesen wäre also gelöst... bleibt nur: wie mach ichs, dass ers nicht immer überspeichert? (ich habs mal anzeigen lassen... er speichert nur die koos des letzten baums...) Code: [AUSKLAPPEN] If KeyHit(28) Then
baumx=EntityX(baum(f)) baumz=EntityZ(baum(f)) saved=WriteFile("editor.dat") stelle=(f*4)+4 SeekFile saved,stelle WriteInt saved,baumx WriteInt saved,baumz CloseFile saved f=f+1 If f>=anz Then f=0 EndIf (immernoch seekfile da mir kein anderer befehl bekannt ist, mit dem es besser gehn würde...) |
||
Diese Signatur ist leer. |
- Zuletzt bearbeitet von darth am Di, Aug 30, 2005 18:57, insgesamt einmal bearbeitet
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du überschreibst höchstens Daten wenn du nach einem Speichervorgang die Datei schliesst (CloseFile), anschliessend wieder öffnest und weitere Daten anfügen möchtest. Für solche Sachen gibt es zB bei Visual Basic den Befehl 'Append' welcher Daten am Ende einer Datei anfügt. Diesen Befehl konnte ich aber in BB nicht finden. Wenn du aber beim speichern zB aus einem Array alle Daten in einem Rutsch schreibst, dann brauchst du SeekFile nicht, da BB für dich die Fileposition vorrückt. | ||
![]() |
darthBetreff: arrey?!? |
![]() Antworten mit Zitat ![]() |
---|---|---|
kann man arreys denn speichern? das wär natürlich die einfachste lösung... ich dachte bisher immer man könne nur variabeln speichern... (also int ect...) wie speichere ich arreys denn (wenns geht)???
write... saved,baumx(arr) write... saved,baumz(arr2) wobei ich noch wissen müsse durch was die ... zu ersetzen sind... =S [edit] es hat geklappt... ich hab den (den?) arrey einfach aufgesplittet und so reingeschrieben... super idee!!! DANKE!!! => jetzt werd ich mich mal an die arbeit machen und die landschaft bepflanzen ![]() |
||
Diese Signatur ist leer. |
![]() |
Ebola33 |
![]() Antworten mit Zitat ![]() |
---|---|---|
BlitzBasic: [AUSKLAPPEN]
mfg Ebola |
||
ansteckend... ![]() verstaubtes Projekt : http://www.mitglied.lycos.de/ebola33/ |
- Zuletzt bearbeitet von Ebola33 am Di, Aug 30, 2005 21:13, insgesamt einmal bearbeitet
![]() |
darthBetreff: danke |
![]() Antworten mit Zitat ![]() |
---|---|---|
jep,
genau so hab ichs gemacht (oder ähnlich...) ich hab einfach 2 eindimensionale arreys genommen... (ich vertrau den 2dim arreys nicht... =S ) |
||
Diese Signatur ist leer. |
![]() |
Ebola33 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Glaube mir, man kann den Mehrdimensionalen Arrays ruhig trauen.
Vorraus gesetzt dass man sie versteht ![]() |
||
ansteckend... ![]() verstaubtes Projekt : http://www.mitglied.lycos.de/ebola33/ |
![]() |
darthBetreff: ^^ |
![]() Antworten mit Zitat ![]() |
---|---|---|
nicht vertrauen ist eher die ausrede für nicht verstehen =)
müsste mich mal damit auseinadersezten (das nötige theoriewissen sollte mir in der schule verabreicht worden sein ... lol) |
||
Diese Signatur ist leer. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group