Kreisförmige Tilemap
Übersicht

SilvioBetreff: Kreisförmige Tilemap |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() 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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Include![]() 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. ![]() |
||
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Silvio |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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. |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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.0Darum 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 |
||
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group