Gebäude

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

blitzuser34

Betreff: Gebäude

BeitragDi, Feb 05, 2008 20:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi, bin gerade dabei, so was wie SimCity zu machen. Wollte nur mal fragen, ob ihr für die Gebäude Type oder Dim verwenden würdet. Meine Map ist 128x128 groß.

ZaP

BeitragDi, Feb 05, 2008 20:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Auf jeden Fall Types, da es unmöglich verherzusagen ist, wieviele Gebäude am Ende eines Spiels auf der Karte stehen werden.
Starfare: Worklog, Website (download)

blitzuser34

BeitragDi, Feb 05, 2008 21:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Mal ne andere Frage: Ab und zu muss man ja mal bei allen Gebäuden die Eigenschaften aktualisieren. Allerdings weiß ich nicht was mit den FPS passiert, wenn man viele Häuser hat(in meinem Fall 16384) und man z.B. die Steuern der Häuser errechnen will.

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDi, Feb 05, 2008 21:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Map hat doch bereits eine Maximalgröße! Also 128x128... Von daher:

Würde ich es mit einem 2D-Array (Dim) machen, denn wo ein Haus ist kann keine Straße sein und umgekehrt. Dieses gilt auch für andere Dinge wie Bäume, Park, Wiese etc... Und da die Map 2D ist, würde ich es eben als Array speichern. Der Vorteiö ist auch, dass diese Map dann mit einer simplen Tilemap-Routine gezeichnet werden kann. Mit Types würde man schnell an Performence verlieren, da eben dann ewige Abfragen getätigt werden müssten, bevor überhaupt ein Haus gezeichnet werden kann.

Um weitere Informationen pro Tile ablegen zu können, kann man jedem Feld eine weitere Dimension geben oder eben weitere Types, aber das Grundmodell sollte ein Array sein.

Meine Meinung.

Nachtrag: Da für jedes Haus eventuelle Steuern berechnet werden müssen, kann man jedes Frame Zeilenweise die Häuser abfragen. Nach 128 Frames hätte man die ganze Map durch und kann wieder von vorne beginnen.

z.B. Dim Map(127,127,3) ;(X,Y,Field)
Field = 0 das Imahehandle
Field = 1 der Steuersatz der bei Abruf direkt berechnet wird
Field = 2 Zustand (100=Top, 10=Runine etc...)
Field = 3 Besucherzahl (Bei Häusern sind es Menschen, bei der Straße Fussgänger etc...)
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

theotheoderich

BeitragDo, Feb 07, 2008 9:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist genau das Problem was ich bei meiner Stadt auch habe Confused

Meine Stadt kann auch größer sein (z. B. 256x256 Tiles).
Ich speichere die Variablen in einem Typearray, so in etwa:

field image
field underconstruction
field construct_id
field ...
...in etwa 50 Variablen für ein Feld
...manche auch mehrfach, z. B.
field road[4]

Dim map.tile(mapsize,mapsize)


Das ergibt für eine 256x256 Felder große Karte einen riesigen Speicherverbrauch (jede Variable 4 Byte also (256x256x4)/1024/1024=0.25 Megabyte. Meine Stadt braucht bei dieser Größe ungefähr 140 MB, allerdings steigt der Speicherbedarf bei dichterer Bebauung nicht mehr, da ja schon alle Variablen vordefiniert wurden.

Natürlich zeichne ich nur die Tiles, die auch sichtbar sind, und da auch nur die, die sich verändert haben (z. B. animiert sind, oder Autoverkehr haben).

Scrollen beansprucht den Rechner natürlich mehr, da dann immer alles sichtbare neu gezeichnet werden muss.

Aber mit diesen Typearray kann man praktischischerweise auf alle Felder (auch einzelne) ohne grossen Schleifenaufwand direkt zugreifen und hat dann sofort alle dort gespeicherten Variablen zur Verfügung.

Das nur mit Arrays zu machen, ohne Types, fand ich sehr aufwendig und sparte auch nur sehr bedingt Speicher. Bei der reinen Array-Verwendung hatte ich zu Beginn einen Speichervorteil, da wenn map(x,y)=0 war das Feld unbebaut und alle anderen Dim-Variablen wurden garnicht erst gefüllt und belegten somit keinen Speicher.
Das Typearray wird aber zu Spielbeginn komplett für alle Felder erstellt und somit der Speicher für sämtliche Variablen reserviert.

Ich habe also den Königsweg auch noch nicht gefunden, nur in Zeiten von Gigabyteweise RAM werde ich diesen hohen Speicherbedarf nicht mehr ändern. Jeder Programmierer schlägt jetzt wahrscheinlich die Hände vor dem Kopf zusammen und denkt "der Depp", aber mir ist ein Vorankommen bei diesem Spiel wichtiger als Speichersparen (damit ärgere ich mich auf meinem C64 schon genug rum *LOL*)

Die Aktualisierungen passieren bei mir nach mehreren Verfahren.
Sämtliche Berechnungen jedes Frame zu machen wäre absoluter Quatsch.
Ich habe ein Datum im Spiel und sämtliche statistische Daten werden zu Jahresende berechnet. Dann kommt eine Meldung, der Spieler kann also eh nicht bauen, da fällt es überhaupt nicht auf, wenn das Spiel mal kurz stehenbleibt.
Gruß
TheoTheoderich
--
The box label said, "Requires Windows XP or better.", so I bought an Amiga Computer.

Mr.Hyde

Newsposter

BeitragDo, Feb 07, 2008 14:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo!

Ich habe bei Watanien 2 dieses Problem nicht. Ich habe ungefähr so gearbeitet wie hectic es hier vorschlägt.
Code: [AUSKLAPPEN]
Dim tile(TILENR_X, TILENR_Y, 9) ;[x, y, z]
; x = X Pos (tile)
; y = Y Pos (tile)

; z =
;0=welches BodenTile
;1=Welches Gebäude (-1=keins) [Typ]
;2=Welches Gebäude [image ID]
;3=Tileübergang
;4=Tileübergang
;5=Tileübergang
;6=Tileübergang
;7=Untergrund
;8=Deko
;9=ID


Bei einer Mapgröße von (unbebaut) 512x512 habe ich einen Speicherverbrauch von ca 5mb bei 300x300 ca zur häflte bebaut 4.8mb. Da diese Methode auch viel leichter zu verwalten ist kann ich nur dazu raten.


EDIT:
Eine extrem Speicher sparende Variante:
statt mehrerer Dimensionen nutzt du ein 2 Dimensionales Dimfeld und speicherst alle Daten aus der dritten Dimension hintereinander als String (das macht in BB deshalb sinn weil auch bei kleinen werten integergroße Bereiche reserviert werden.

Beispiel:
Code: [AUSKLAPPEN]

Dim Dimfeld (x, y, 3)
Dimfeld(x, y, 0) = 15
Dimfeld(x, y, 1) = 65
Dimfeld(x, y, 2) = 23
Dimfeld(x, y, 3) = 09

;kann auch als
Dimfeld(x, y) = "15652309"
;gespeichert werden

mi den Stringbearbeitungsbefehlen kann nun ganz bequem ausgelesen werden was man braucht.
BBP News RSS | Chaos Interactive | Watanien 2 Screens, Infos und Download | Watanien 2 Worklog | PuzzleMasters
http://abgeordnetenwatch.de - http://www.regierungs-beratung.de - Der Regierung auf die Finger schauen

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group