Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Beni5 Super JLI'ler
Alter: 36 Anmeldedatum: 12.11.2003 Beiträge: 310 Wohnort: Switzerland Medaillen: Keine
|
Verfasst am: 07.08.2004, 16:54 Titel: Scrolling |
|
|
Hallo!
Hat jemand ein gutes tutorial zum Thema Scrolling? Also wie man das in der theorie macht. Ich meine natürlich mit Tiles , wie in RPG's. Ich möchte es mal mit meinem selber gemachten Scrolling vergleichen und schauen ob es auch besser und Performancesparender geht.
THX |
|
Nach oben |
|
|
GreveN JLI Master
Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
Verfasst am: 07.08.2004, 17:04 Titel: |
|
|
Tjo... tät mich auch mal interessieren...
Ich mach das kurz gesagt immer so:
- Tilemap oben/unten/rechts/links mit jeweils einer Spalte/Zeile Tiles zuviel zeichnen, so das diese praktisch über den Bildschirmrand hinausragen...
- wenn gescrollt wird das alles pixelweise verschieben
- wenn um soviele Pixel gescrollt wurde, wie ein Teil breit/hoch ist, werden die Tiles neu in das 2-dim. Vector/Array kopiert bzw. verschoben...
kA ob das jetzt irgendwie hilfreich war, ich schätze mal eher nicht, da das die einzige mir bekannte Methode ist ein pixelweises Scrollen in einer Tileengine zu realiseren und so schwierig ist die Umsetzung ja nicht.
Also wenn jemand noch eine andere, effektivere Möglichkeit kennt, bzw. mit Code Snippets dienen kann, nur zu! Interessiert mich wie gesagt auch!! |
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 07.08.2004, 17:12 Titel: |
|
|
Was gibt es da groß an Performace zu optimieren?
Man macht das doch einfach so:
Draw_with Scrolling(...)
{
Draw(global_Scrolling.x,global_Scrolling.y,...);
}
Man verschiebt einfach nur alle Objekte um die gescrollte x- und y-Position?
und dann blittet man? so mach ich das auf jeden Fall immer... _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 07.08.2004, 17:14 Titel: |
|
|
TheMillenium hat Folgendes geschrieben: | Was gibt es da groß an Performace zu optimieren?
Man macht das doch einfach so:
Draw_with Scrolling(...)
{
Draw(global_Scrolling.x,global_Scrolling.y,...);
}
Man verschiebt einfach nur alle Objekte um die gescrollte x- und y-Position?
und dann blittet man? so mach ich das auf jeden Fall immer... |
der meinung bin ich auch, auch wenn vorher nur die sichtbaren Bereiche gesammelt werden suche und diese dann bearbeite.
Was ist mit pixelweisen verschieben gemeint ? Nur die Tileposition ? _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
|
GreveN JLI Master
Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
Verfasst am: 07.08.2004, 17:15 Titel: |
|
|
Versteh ich nicht 100 pro...
Mal angenommen du hast eine 100x100 Tiles große Map, auf den Screen passen immer 10x10, dann zeichnest du doch logischerweise nicht immer alle 10.000 sondern nur die 100 die man wirklich sieht...
Edit:
Zitat: | Was ist mit pixelweisen verschieben gemeint ? Nur die Tileposition ? |
Jo |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 07.08.2004, 17:18 Titel: |
|
|
GreveN hat Folgendes geschrieben: | Versteh ich nicht 100 pro...
Mal angenommen du hast eine 100x100 Tiles große Map, auf den Screen passen immer 10x10, dann zeichnest du doch logischerweise nicht immer alle 10.000 sondern nur die 100 die man wirklich sieht...
Edit:
Zitat: | Was ist mit pixelweisen verschieben gemeint ? Nur die Tileposition ? |
Jo |
Ich glaube TheMillenium macht seine Sichtbarkeitstests in der Draw Funktion. _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 07.08.2004, 17:19 Titel: |
|
|
wenn man schönes View Scrolling also als Animation machen will und man ist mit dem Ergebnis nicht so zufrieden dann geht das noch so:
Einfach ne Surface anlegen, die etwas größer als der Screen ist, den Speicher kann man sich schon leisten wenn man nen Backbuffer hat, ist meine Meinung, dann blittet man alles aus dem View Bereich dadrauf und dann mit der RectDraw Funktion auf die eigene Surface...ist schneller als Pixelweise...und mir kommts eher auf die Performance an, als Speicher den wir eh schon zu genüge vorhanden haben! _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 07.08.2004, 17:22 Titel: |
|
|
Dann musste aber jedesmal wenn ein neues Tile theoretisch auf dein Surface erscheinen muss as Surface locken und neu alles drauf rendern. Es sei denn du wählst dein Surface so gross das genügend Spielraum für weitere Tiles out of bound vorhanden sind. _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
|
Beni5 Super JLI'ler
Alter: 36 Anmeldedatum: 12.11.2003 Beiträge: 310 Wohnort: Switzerland Medaillen: Keine
|
Verfasst am: 07.08.2004, 18:03 Titel: |
|
|
Naja, indemfall mach ich das schon richtig. Ich zeichne alles direkt in den BackBuffer. Ich mach auch immer ein Tile am Rand dazu. Wenn man sich bewegt werden die Tiles am Rand immer extra angepasst damit sie dargestellt werden können, da ich auch Surfaces benutze. Nur ist das Problem bei mir das manchmal unerklärbare Fehler auftreten, und zwar verschieben sich alle Tiles plötzlich um eine Position, oder Das erste Tile blinkt (wird mal angezeigt und mal nicht). Diese Probleme treten aber nicht bei den Surface Tiles auf sondern nur beim 2. Layer den ich mit Sprites mache, aber ich benutze die gleichen x,y Werte wie bei den Surfaces. |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 07.08.2004, 20:09 Titel: |
|
|
Ich wundere mich auch gerade, wieso ihr das so umständlich macht
Ich habe dafür zwei Variablen:
Code: | int scrollx;
int scrolly; |
Dann gibts ein paar Funktionen, die die Screenkoordinaten in Weltkoordinaten umrechnet und umgekehrt.
Code: | //Screen->Welt
int worldx=screenx+scrollx;
int worldy=screeny+scrolly;
//Welt->Screen
int screenx=worldx-scrollx;
int screeny=worldy-scrolly;
|
Jetzt rechne ich einfach in der Renderfunktion aus, welcher Bereich sichtbar ist (ScreenToWorld(0,0) bis ScreenToWorld(Auflösungx,Auflösungy)) und zeichne die Tiles an die Position WorldToScreen(tilex,tiley). _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
Beni5 Super JLI'ler
Alter: 36 Anmeldedatum: 12.11.2003 Beiträge: 310 Wohnort: Switzerland Medaillen: Keine
|
Verfasst am: 07.08.2004, 21:06 Titel: |
|
|
*gnarr* *gnaarrrr* Ich hab überhaupt nichts Falsch gemacht. Aber ich habe beim FUnktionsaufruf die Tastenabfrage zwischen den vershciedenen Layern gemacht also so:
Layer1();
Input();
Layer2();
Das heisst die Koordinaten stimmen nicht mehr 100% prozent überein da DInput ja sehr schnell ist. Und ich habe erst garnicht dort nachgeschaut und immer probiert die Renderfunktion zu entbuggen...
PS: Danke für die Hilfe! |
|
Nach oben |
|
|
|