Arbeitsweise von DisplaySprite()

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Arbeitsweise von DisplaySprite()

Beitrag 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?
Benutzeravatar
Hroudtwolf
Beiträge: 1416
Registriert: 30.10.2004 23:33
Kontaktdaten:

Bildschirmspeicher_Hauptspeicher

Beitrag 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
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag 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...
Benutzeravatar
Hroudtwolf
Beiträge: 1416
Registriert: 30.10.2004 23:33
Kontaktdaten:

FAUSTREGEL

Beitrag von Hroudtwolf »

FAUSTREGEL :

DER COMPUTER IST IMMER NUR SO INTELIGENT WIE SEIN BENUTZER !!!

Sag ihm was er tun sol und er machts........;-)
Benutzeravatar
nco2k
Beiträge: 892
Registriert: 08.09.2004 23:13

Re: FAUSTREGEL

Beitrag von nco2k »

Hroudtwolf hat geschrieben:Sag ihm was er tun sol und er machts........;-)
naja, auch nicht immer. :mrgreen:

c ya,
nco2k
~|__/
..o.o.. <--- This is Einkaufswagen. Copy Einkaufswagen into your signature to help him on his way to world domination.
Serge
Beiträge: 66
Registriert: 20.09.2004 20:44
Kontaktdaten:

Beitrag 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 ;)
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag 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...
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten