Types schreiben & auslesen *HILFE!*

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

EwokonCrack

Betreff: Types schreiben & auslesen *HILFE!*

BeitragSo, Jun 14, 2009 12:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo! Für mein aktuelles projekt brauche in eine Speicherfunktion mit der ich Types schreiben und auslesen kann.

Code: [AUSKLAPPEN]
Type gebaeude
Field x
Field y
Field ID
Field typ
Field baustart
Field fertig
End Type


Mit einem Mausklick erstelle ich objekte an bestimmten positionen.
In etwa so:
Code: [AUSKLAPPEN]

g.gebaeude = New gebaeude
g\x = MouseX()
g\y = MouseY()
g\baustart = sekunden


Dann bestimmte ich für jedes gebäude, entsprechend seinem typ, wielange es zum aufbau benötigt.

Code: [AUSKLAPPEN]

For g.gebaeude = Each gebaeude
Select g\typ
  Case "haus1"
    If sekunden-30 > g\baustart Then g\fertig=True
    If g\fertig=True Then g\ID=haus1 Else g\ID=baustelle
   Case ...


End Select
Next


Funktioniert alles prächtig. Doch nun bin ich beim speichern angelangt:
Ich dachte per For Each die anzahl der erstellten types zu zählen und dann für jeden die entsprechenden felder zu speichern (speichern = schreiben mit WriteByte und co) und beim nächsten spielstart auszulesen. doch wie? ich komm einfach auf keine lösung.

Noch ein problem:
ich will überprüfen, ob ein bestimmtes gebäude in der nähe von einem anderen ist:
Code: [AUSKLAPPEN]

For g.gebaeude = Each gebaeude
If g\typ="haus1" Then
x=g\x
y=g\y
ID=g\ID
For g.gebaeude = Each gebaeude
If g\typ="schule" Then
If ImageRectCollide(ID,x,y,0,  g\x-5,g\y-5,100,50) Then ... Exit
endif
Next
Next

Ich muss prüfen, ob das haus in der nähe der schule steht. diese funktion meldet mir aber immer ne MAV

Bitte um Hilfe!
  • Zuletzt bearbeitet von EwokonCrack am Mo, Jun 15, 2009 15:38, insgesamt einmal bearbeitet

Nicdel

BeitragSo, Jun 14, 2009 12:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Zu erstens:

Warum nicht so?

BlitzBasic: [AUSKLAPPEN]


For g.gebaeude = Each gebaeude
anzahl = anzahl + 1
Next

WriteInt file, anzahl

For g.gebaeude = Each gebaeude
WriteByte file, g\irgendwas
WriteString file, g\nochmehr$
;...
Next


;--------------------------

anzahl = ReadInt(file)

For i = 1 To anzahl
g.gebaeude = New gebaeude
g\itgendwas = ReadByte file
;...
Next


zu zweitens:

Hast du eine nVidia-Grafikkarte? Schau mal hier.
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7
 

EwokonCrack

BeitragSo, Jun 14, 2009 13:47
Antworten mit Zitat
Benutzer-Profile anzeigen
1. habs so ausprobiert und es ging nicht.

!Code: [AUSKLAPPEN]

          If KeyHit(1) Then
      total=0
      For g.gebaeude=Each gebaeude
      total=total+1
      Next
      stream = WriteFile("spielstand.sav")
      WriteByte stream,total
      For g.gebaeude=Each gebaeude
      WriteShort stream,g\x
      WriteShort stream,g\y
      WriteString stream,g\typ
      WriteByte stream,g\bebaut
      Next
      CloseFile stream
      End
   EndIf



streamin=ReadFile("spielstand.sav")
total=ReadByte(streamin)
total=total/2
For i=1 To total
g.gebaeude=New gebaeude
g\x=ReadShort(streamin)
g\y=ReadShort(streamin)
g\typ$=ReadString(streamin)
g\bebaut=ReadByte(streamin)
Next
CloseFile streamin


2. An der Grafikkarte kanns nicht liegen. Hab mal rumprobiert und ich glaube es liegt daran, dass ich 2 For-Each schleifen ineinander gestapelt habe. aber eigentlich geht das doch!?
  • Zuletzt bearbeitet von EwokonCrack am So, Jun 14, 2009 14:37, insgesamt 2-mal bearbeitet

TimBo

BeitragSo, Jun 14, 2009 13:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

wenn es um die Kollision geht , kannst du auch bei Quadratischen Gebäuden Line_Intersect benutzen - siehe Codearchiv. Diese Prüfung jedes mit jedem mache ich auch so , immer in temp. Variablen speichern und dann in der 2ten Schleife prüfen.

Viele Grüße
TimBo
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.

The_Nici

BeitragSo, Jun 14, 2009 14:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Ihr braucht kein total oder anzahl, für sowas gibt es EoF bzw könnt ihr euch das markieren, mit Sachen wie [Buildings] [New] [/Buildings].
MfG

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group