Arbeitsweise von DisplaySprite()
Arbeitsweise von DisplaySprite()
Hallo!
Hab 'ne wichtige Frage zur Arbeitsweise des DisplaySprite()-Befehls.
Und zwar: erkennt der Befehl automatisch, wenn ein Sprite völlig außerhalb des Bildschirms wäre, und berechnet dies dann dementsprechend auch nicht?
Um es etwas anschaulicher zu erklären: stellt euch vor, ihr hättet ein riesengroßes Level, das ca. 50 Bildschirme braucht. Davon werden also 49 gar nie angezeigt. Wenn ihr jetzt ein Spiel macht, bei dem gescrollt wird, gibt es einerseits die Möglichkeit, die Dinge nur dann anzuzeigen, wenn sie sichtbar wären, oder andererseits gleich alles anzuzeigen, wobei natürlich 98% des Levels dann sowieso außerhalb des sichtbaren Bereiches wären.
Würde PureBasic dann trotzdem die ganzen Sprites berechnen und "anzeigen", die auf den anderen 49 Screens sind, oder würde dies komplett ignoriert werden?
Hab 'ne wichtige Frage zur Arbeitsweise des DisplaySprite()-Befehls.
Und zwar: erkennt der Befehl automatisch, wenn ein Sprite völlig außerhalb des Bildschirms wäre, und berechnet dies dann dementsprechend auch nicht?
Um es etwas anschaulicher zu erklären: stellt euch vor, ihr hättet ein riesengroßes Level, das ca. 50 Bildschirme braucht. Davon werden also 49 gar nie angezeigt. Wenn ihr jetzt ein Spiel macht, bei dem gescrollt wird, gibt es einerseits die Möglichkeit, die Dinge nur dann anzuzeigen, wenn sie sichtbar wären, oder andererseits gleich alles anzuzeigen, wobei natürlich 98% des Levels dann sowieso außerhalb des sichtbaren Bereiches wären.
Würde PureBasic dann trotzdem die ganzen Sprites berechnen und "anzeigen", die auf den anderen 49 Screens sind, oder würde dies komplett ignoriert werden?
- Hroudtwolf
- Beiträge: 1416
- Registriert: 30.10.2004 23:33
- Kontaktdaten:
Bildschirmspeicher_Hauptspeicher
Ich vermute mal , daß die ganzen Sprites im Hauptspeicher oder sogar im Grafikspeicher weiterberechnet werden. Das merkst du schon daran , daß deine Programme immer langsammer werden desto grösser das angezeigte Sprite ist. Du kannst wiederrum aber dafür sorgen .daß nur der sichtbare Bereich berechnet wird. Indem du die richtigen Anweisungen gibst.
z.B.
Bildschirmauflösung von 800x600
z.B.
Bildschirmauflösung von 800x600
Code: Alles auswählen
for x=1 to 2000
if x<800:displaysprite (1,x,100):endif ; Im sichtbaren Bereich wird angezeigt
next x
Jo, das werd ich dann wohl auch tun müssen.
Nur, wenn es eben so wäre, daß Purebasic das automatisch erkennt, dann bräuchte ich einfach bloß immer die komplette Anzeigeroutine durchlaufen lassen, und los geht's
Aber in diesem Fall wird's da wohl wirklich Geschwindigkeitsprobleme geben. Also doch immer nur 'nen Ausschnitt anzeigen...
Nur, wenn es eben so wäre, daß Purebasic das automatisch erkennt, dann bräuchte ich einfach bloß immer die komplette Anzeigeroutine durchlaufen lassen, und los geht's

Aber in diesem Fall wird's da wohl wirklich Geschwindigkeitsprobleme geben. Also doch immer nur 'nen Ausschnitt anzeigen...
- Hroudtwolf
- Beiträge: 1416
- Registriert: 30.10.2004 23:33
- Kontaktdaten:
FAUSTREGEL
FAUSTREGEL :
DER COMPUTER IST IMMER NUR SO INTELIGENT WIE SEIN BENUTZER !!!
Sag ihm was er tun sol und er machts........
DER COMPUTER IST IMMER NUR SO INTELIGENT WIE SEIN BENUTZER !!!
Sag ihm was er tun sol und er machts........

Re: FAUSTREGEL
naja, auch nicht immer.Hroudtwolf hat geschrieben:Sag ihm was er tun sol und er machts........

c ya,
nco2k
~|__/
..o.o.. <--- This is Einkaufswagen. Copy Einkaufswagen into your signature to help him on his way to world domination.
..o.o.. <--- This is Einkaufswagen. Copy Einkaufswagen into your signature to help him on his way to world domination.
Naja bin mir nicht sicher aber es kann durchaus sein dass PB das Sprite garnicht berechnet wenn es komplett außerhalb des Bereiches ist. Dennoch sollte man nicht das ganze Level durchgehen, denn das alleine würde bei einem großem Level ebenfalls einen Zeitaufwand kosten.
Wenn deine Leveldaten z. B. jetzt in einem Array wären:
DIM level(2000,20) (x tiles, y tiles)
und sich der Spieler an der x-tile position 25 befindet müsstest du dann einfach nur die richtigen Sprites Durchgehen:
Selbstverständlich stark vereinfacht 
Wenn deine Leveldaten z. B. jetzt in einem Array wären:
DIM level(2000,20) (x tiles, y tiles)
und sich der Spieler an der x-tile position 25 befindet müsstest du dann einfach nur die richtigen Sprites Durchgehen:
Code: Alles auswählen
for x=SpielerXposition-10 to SpielerXposition+10
for y=1 to 20
Displaytile(x,y)
next
next

besucht http://www.dark-matter-soft.de
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
grundsätzlich ist die frage schon interessant.
aber: wenn dein screen eh aus tiles besteht, ist echt die frage,
ob es sinnvoll ist, die komplette map durchzugehen und zu zeichnen.
die schleifen wären ja x-mal so gross, wie sie wären, wenn du vorher
die koordinaten checkst.
selbst wenn DisplaySprite nichts tut, als die koordinaten checken und verwerfen,
wär der zeitaufwand trotzdem massig grösser, als wenn du die schleifen sinnvoll beschränkst.
wenn du eine einzige riesige grafik als hintergrund hast, gilt das natürlich nicht,
aber da musst du dann auch gucken, wieviel speicher du verbrätst,
ob die grafik in den speicher der GraKa passt,
denn darstellung aus dem Hauptspeicher geht zwar, aber dauert merklich länger.
aber: wenn dein screen eh aus tiles besteht, ist echt die frage,
ob es sinnvoll ist, die komplette map durchzugehen und zu zeichnen.
die schleifen wären ja x-mal so gross, wie sie wären, wenn du vorher
die koordinaten checkst.
selbst wenn DisplaySprite nichts tut, als die koordinaten checken und verwerfen,
wär der zeitaufwand trotzdem massig grösser, als wenn du die schleifen sinnvoll beschränkst.
wenn du eine einzige riesige grafik als hintergrund hast, gilt das natürlich nicht,
aber da musst du dann auch gucken, wieviel speicher du verbrätst,
ob die grafik in den speicher der GraKa passt,
denn darstellung aus dem Hauptspeicher geht zwar, aber dauert merklich länger.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.