Kreisförmige Tilemap

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Silvio

Betreff: Kreisförmige Tilemap

BeitragSa, Aug 11, 2012 2:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich möchte eine Kreisförmige Tilemap erstellen und weiß auch schon wie ich das anstelle. Ich möchte bloß von euch wissen ob das gut so ist, oder ob ihr ne schlauere Idee dazu habt.

die Map besteht aus 32x32 Pixel großen Tiles und soll ein ausgefüllter Kreis im gesamten sein.

Also bisher habe ich diese Map so erstellt:

Ich möchte eine Map die 100x100 tiles groß ist und um zu wissen wo ein Tile in diesem Quadrat gezeichnet werden muss und wo nicht habe ich mit der oval Funktion einen ausgefüllten Kreis gemalt und alle Pixel nach farbe gecheckt. Die Daten habe ich alle in ein Array gefüllt. Das sind ja 100x100 = 10000 Felder. Beim Zeichnen wird dann im Array geschaut ob bei der Stelle ein Tile hinkommt.Klingt für mich irgendwie viel und es kommt mir so vor als sein meine Vorgehensweise umständlich. Jetzt ist mir nämlich eine 100x100 Map zu klein und ich hab eine 500x500 map in einem Array gespeichert und das sind ja dann 500x500 = 250000 Felder im Array. Das ist mein erstes richtiges Projekt und ich hab keine Erfahrung oder Maßstäbe ob so eine Datenmenge zuviel ist oder es mir nur so vorkommt. Der muss ja dann bei jedem Schleifendurchgang diesen 250k Array durchgehen. Das compilieren dauert auch ein paar Sekunden, aber läuft sonst Reibungslos.

Würde mich freuen, falls jemand was dazu zu sagen hat Very Happy

Xeres

Moderator

BeitragSa, Aug 11, 2012 11:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Silvio hat Folgendes geschrieben:
Der muss ja dann bei jedem Schleifendurchgang diesen 250k Array durchgehen.
Öhm... nö.
Im Prinzip muss man nur die Tiles abarbeiten, die sich auf dem Bildschirm befinden. Geschickt die Grenzen Ausrechnen Idea

Es sei auch der Bresenham-Algorithmus erwähnt (aber einmalig Pixel zeichnen & lesen hört sich auch nicht zu schlimm an).
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Midimaster

BeitragSa, Aug 11, 2012 13:13
Antworten mit Zitat
Benutzer-Profile anzeigen
beschreib doch mal für welchen konkreten Zweck du die Map benötigst. Ich könnte mir vorstellen, dass auch eine langgestreckte Map in der Logik den gleichen Zweck erfüllt, wenn man einen Algo einbaut, der nach Map(32) die nächste Map auf Map(1) "umroutet"
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe
 

Silvio

BeitragMo, Aug 13, 2012 0:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich zeichne nicht jeden Schleifendurchgang alle Tiles. Nur die angezeigten. Ich wollte eigentlich nur wissen, ob ich ohne Probleme so ein großes Array benutzen kann.

Der Testkreis wird auch nicht jedesmal bei Programmstart gemalt und gelesen, sondern das habe ich einmal vorher gemacht und die Daten in eine Datei gespeichert und die include ich dann.
 

bjh

BeitragMo, Aug 13, 2012 7:57
Antworten mit Zitat
Benutzer-Profile anzeigen
hallo,

ein array mit 1024*1024 benötigt 1024*1024*4 bytes = 4 megabytes.

also bei so "kleinen" arrays musst du dir noch keine gedanken, was den speicher angeht, machen.

nur damit diese frage beantwortet ist Very Happy

Xeres

Moderator

BeitragMo, Aug 13, 2012 18:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Include? Da schreib und lies lieber gleich richtig in Dateien - damit bist du besser bedient.
Klar kann man auch größere Arrays benutzen, wenn man nicht vollkommen unoptimiert ran geht. Dynamische Mapgrößen und automatisches Nachladen hören sich nach tollen Features an... aber es ist auch okay, wenn das Spiel noch zu Lebzeiten fertig wird. Wink
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

Silvio

BeitragSo, Aug 19, 2012 3:32
Antworten mit Zitat
Benutzer-Profile anzeigen
ich will wegen diesem kleinen Problem kein neuen Thread aufmachen, darum schreib ichs mal hier rein.

blitz liefert mir für

99/100 = 0.0

und für

99.0/100.0 = 0.99

ich speicher das schon in ein float also:

zahl# = 99/100

und gebe dann zahl# mit "Text" aus.

Weiß einer woran das liegt? Ich habe das ganze nicht in anderem Code verwurschtelt, dass da irgendein Fehler sein könnte.

ich kann das umgehen mit

zahl# = float(99)/float(100)

aber interessieren würde es mich trotzdem ob das normal ist oder nicht.

Xeres

Moderator

BeitragSo, Aug 19, 2012 8:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Sicher ist das Normal. 100 ist eine ganze Zahl (Integer), 100.0 ist eine Fließkommazahl (Float). Wenn du nur mit Ints rechnest, erhältst du auch ein Int als Ergebnis. Sobald eine Zahl ein Float ist, ist das Ergebnis auch Float (z.B. 99/100.0 = 0.99).
Zusätzlich sind Floats generell Fehlerbehaftet, da man nicht jeden Wert restlos binär codieren kann...
BlitzBasic: [AUSKLAPPEN]
Local v# = 1.0

For i=0 To 10
v# = v# -0.1
Print v#
Next

WaitKey()
Darum bei Vergleichen mit Floats auf = verzichten und wenn es auf exakte Werte ankommt nur mit Ints arbeiten und nur im letzten Moment (zum Anzeigen) in Floats umwandeln.
BlitzBasic: [AUSKLAPPEN]
Local Pval = 4036	; Soll 40,36 % entsprechen 
Const Pfaktor# = 100.0
Local prozent# = Pval / Pfaktor
Print prozent# + "%"
WaitKey()
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group