Seite 1 von 1
Arbeitsweise von DisplaySprite()
Verfasst: 21.12.2004 22:02
von ZeHa
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?
Bildschirmspeicher_Hauptspeicher
Verfasst: 22.12.2004 00:41
von Hroudtwolf
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
Code: Alles auswählen
for x=1 to 2000
if x<800:displaysprite (1,x,100):endif ; Im sichtbaren Bereich wird angezeigt
next x
Verfasst: 22.12.2004 01:05
von ZeHa
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...
FAUSTREGEL
Verfasst: 22.12.2004 04:36
von Hroudtwolf
FAUSTREGEL :
DER COMPUTER IST IMMER NUR SO INTELIGENT WIE SEIN BENUTZER !!!
Sag ihm was er tun sol und er machts........

Re: FAUSTREGEL
Verfasst: 22.12.2004 04:54
von nco2k
Hroudtwolf hat geschrieben:Sag ihm was er tun sol und er machts........

naja, auch nicht immer.
c ya,
nco2k
Verfasst: 22.12.2004 22:25
von Serge
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:
Code: Alles auswählen
for x=SpielerXposition-10 to SpielerXposition+10
for y=1 to 20
Displaytile(x,y)
next
next
Selbstverständlich stark vereinfacht

Verfasst: 23.12.2004 03:13
von ZeHa
Ja so ähnlich werd ich es dann auch machen müssen, aber vielleicht werd ich vorher auch einfach mal 'nen Geschwindigkeitstest programmieren... weil interessieren würd's mich schonmal, ob die Sprites generell berechnet werden...
Verfasst: 23.12.2004 11:49
von Kaeru Gaman
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.