JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=181b438ada29cbe6d02da6dbeb699545Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Lange Aufbauzeit
Gehe zu Seite 1, 2, 3  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
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

BeitragVerfasst am: 27.01.2004, 20:15    Titel: Lange Aufbauzeit Antworten mit Zitat

Hallo

Ich erstelle die Welten wo sich der Player bewegt auf verschiedenen Grafiken auf einem Surface. Vorher werden in einem Array die Werte der Grafiken gespeichert und somit wird per D3DXLoadSurfaceFromFile immer ein anderer teil eines bildes ausgeschnitten und aufs Surface gemalt. Jedoch hat es verdammt lange ladezeiten, bei noch nicht mal so grossen Maps. Aber bei anderen rpg's die man z.b. mit dem rpg maker erstellt sind die Welten ja viel grösser und es lädt nicht so lange. Verwende ich die Falsche Technik?

THX
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
xardias
JLI Master


Alter: 38
Anmeldedatum: 28.12.2003
Beiträge: 804
Wohnort: Palo Alto, CA
Medaillen: Keine

BeitragVerfasst am: 28.01.2004, 07:09    Titel: Antworten mit Zitat

Also
1. die meisten RPGs benutzen Tile maps. Diese werden dann einzeln in den front/back buffer geblittet.
2. Das mit dem ausschneiden. wie machst du das ? du kansnt ja auch der Blit funktion 2 rects übergeben, die angeben, wohin welche bereiche des Surface geblittet werden.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beni5
Super JLI'ler


Alter: 36
Anmeldedatum: 12.11.2003
Beiträge: 310
Wohnort: Switzerland
Medaillen: Keine

BeitragVerfasst am: 28.01.2004, 07:14    Titel: Antworten mit Zitat

Ja ich benutze ja auch Tilemaps... Nur gehts irre lange um die zu erstellen.

Mit LoadFromSurface kann man ja auch nur Teile einer Datei kopieren. Und das mach ich halt mit ner Rect Struktur die sich , je nach dem welcher Wert ein Tiles im Array hat, verändert. Und mit dem in den Frontbuffer kopieren hab ich kein Problem das geht schnell. Nur das aufbauen der Tilemap dauert zu lange.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 28.01.2004, 11:58    Titel: Antworten mit Zitat

Sehe ich das richtig das du jedes Tile als Bibliothek aus der Tilemap in ein Array lädst ? Um so dann deine Landschaft mit der Bibliothek auszubauen ?
Dann ist es ja klar das er solange braucht. Kopiere doch einfach nur den benötigten Tile direkt aus der Tilemap in den Backbuffer. Das spart dann noch Ressorcen.
_________________
"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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beni5
Super JLI'ler


Alter: 36
Anmeldedatum: 12.11.2003
Beiträge: 310
Wohnort: Switzerland
Medaillen: Keine

BeitragVerfasst am: 28.01.2004, 13:47    Titel: Antworten mit Zitat

ne das array bestimmt welches teil geladen werden soll, die werden dann alle zusammen auf ein map surface getan und , dann auf den backbuffer gezeichnet , natürlich nur ein ausschnitt davon (bildschirm). Die Arrays kann ich dann wieder verwenden für die Kollisionserkennung. Also denkt ihr ich sollte die Map garnet zuerst auf ein Surface zeichnen Sondern gerade nur das was man braucht? Das wird schwierig...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 28.01.2004, 13:53    Titel: Antworten mit Zitat

Na das Tileset lädst du als textur irgendwo hin, ganz normal. Und ja nach dem was in deinem Array steht kopierst du das benötigte tile aus der textur auf die zeichenfläche. Leider wird das dadurch dann langsamer weil du bestimmt über 100 Tiles pro Frame renderst. Dafür führst du bestimmt für jedes Tile einen extra Zeichenbefehl aus, und das kostet bei DX ziemlich viel Leistung.

Viel Besser wäre wenn du alle gleichen Tiles in einem Rutsch zeichnest.
_________________
"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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beni5
Super JLI'ler


Alter: 36
Anmeldedatum: 12.11.2003
Beiträge: 310
Wohnort: Switzerland
Medaillen: Keine

BeitragVerfasst am: 01.02.2004, 20:25    Titel: Antworten mit Zitat

Also ich habs jetzt mal so probiert nur eine Pixelreihe hineinzukopieren wenn ich mich bewege doch sogar das stockt dann kurz , wegen nur einer Reihe.. Ich benutze ja StretchRect, liegt es vielleicht an dem? Ist das zu langsam? Und mit Stretchrect kann man ja leider nicht direkt in den Backbuffer schreiben so muss ich immer zuerst auf ein anderes Surface zeichnen. Könnt ihr mir irgend ne andere Funktion empfehlen?

Ah ja geht es eigentlich schneller , etwas zu zeichnen wenn es in einem Surface ist anstatt aus ner file auf der HD?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 01.02.2004, 21:12    Titel: Antworten mit Zitat

Beni5 hat Folgendes geschrieben:
Ah ja geht es eigentlich schneller , etwas zu zeichnen wenn es in einem Surface ist anstatt aus ner file auf der HD?

Wie willst du es den aus einem File zeichnen ohne Surface?
Oder meinst du, ob es schneller ist, wenn man alles zuerst in ein Surface blittet, bevor es in den Backbuffer kommt?
_________________
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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beni5
Super JLI'ler


Alter: 36
Anmeldedatum: 12.11.2003
Beiträge: 310
Wohnort: Switzerland
Medaillen: Keine

BeitragVerfasst am: 01.02.2004, 21:48    Titel: Antworten mit Zitat

Man kann mit D3DXLoadSurfaceFromFile direkt aus bildern laden. Und jetzt hab ich es so gemacht das er genau nur das aus der file lädt das gezeichnet werden muss. Und jetzt wollte ich halt wissen ob es nicht schneller wäre diese tiles die mir zur verfügung stehen zuert auf ein surface zumalen und von dort zu kopieren anstatt aus der bilddatei.

Ich vermute langsam das liegt an der Funktion StretchRect , die ist doch einfach zu lahm. Es gibt schon en mächtigen ruck wenn ich nur 600 Pixel auf das Surface kopiere...

Ich bräuchte ne funktion mit der Ich direkt in den Backbuffer schreiben kann. Aber mit StretchRect geht das nicht, könnt ihr mir da was empfehlen?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 04.02.2004, 17:06    Titel: Antworten mit Zitat

Ich denke nicht, dass StretchRect zu langsam ist um 600 Pixel pro Frame zu kopieren und StretchRect kann soweit ich weiss auch direkt auf den Backbuffer kopieren.

Christian
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beni5
Super JLI'ler


Alter: 36
Anmeldedatum: 12.11.2003
Beiträge: 310
Wohnort: Switzerland
Medaillen: Keine

BeitragVerfasst am: 04.02.2004, 17:31    Titel: Antworten mit Zitat

Komisch , aber bei mir gibts nen heftigen Ruck wenn ich 15 quadrate mit Seitenlänge 40 Pixel hineinkopiere...
Ich denke es liegt irgendwie daran das diese 600 Pixel aus mehreren stücken besteht und dies zu lange geht. Aber bei anderen spielen wird das ja auch so gemacht.
Hilfe!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Chewie
Super JLI'ler



Anmeldedatum: 17.07.2003
Beiträge: 382

Medaillen: Keine

BeitragVerfasst am: 04.02.2004, 20:27    Titel: Antworten mit Zitat

Beni5 hat Folgendes geschrieben:
Man kann mit D3DXLoadSurfaceFromFile direkt aus bildern laden. Und jetzt hab ich es so gemacht das er genau nur das aus der file lädt das gezeichnet werden muss. Und jetzt wollte ich halt wissen ob es nicht schneller wäre diese tiles die mir zur verfügung stehen zuert auf ein surface zumalen und von dort zu kopieren anstatt aus der bilddatei.


versteh ich das richtig, du lädst jeden durchlauf mit D3DXLoadSurfaceFromFile() die bilder neu? wenn ja, dann liegts sicher daran..also beim hochfahren 1x alles in eine surface laden und von dort kopieren.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beni5
Super JLI'ler


Alter: 36
Anmeldedatum: 12.11.2003
Beiträge: 310
Wohnort: Switzerland
Medaillen: Keine

BeitragVerfasst am: 04.02.2004, 20:36    Titel: Antworten mit Zitat

Ne , bis jetzt hab ich es mit loadsurfacefromfile auf ein MapSurface gemalt , 1x und dann in BeginScene immer den Bildschirmausschnitt (800*600) vom MapSurface dargestellt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Chewie
Super JLI'ler



Anmeldedatum: 17.07.2003
Beiträge: 382

Medaillen: Keine

BeitragVerfasst am: 04.02.2004, 20:54    Titel: Antworten mit Zitat

wie hast du alle tiles gespeichert und wie bringst du sie auf den bildschirm? ich checks immer noch nicht.

aja, und mit stretchrect kann man ohne probleme direkt in den backbuffer zeichnen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beni5
Super JLI'ler


Alter: 36
Anmeldedatum: 12.11.2003
Beiträge: 310
Wohnort: Switzerland
Medaillen: Keine

BeitragVerfasst am: 04.02.2004, 22:00    Titel: Antworten mit Zitat

Also:

Zuerst wird das Level gemacht das ist ein Array in der Form: TILES[20][20] , das heisst es sind 20 auf 20 tiles in der map. Da ich eine Auflösung von 800*600 verwende , hab ich es so gemacht das jedes Tile eine grösse von 40*40 Pixel hat. Und jetzt kann man jedem Tile einen Wert zuweisen z.b. TILES[1][1]=1; das heisst das Tile ganz links oben hat den Wert 1. So nun hab ich eine funktion geschrieben die jedes teil liest und denn Wert überprüft. Wenn der Wert 1 ist hab ich gemacht das ein Rect so berechnet wird das die 1. Textur im Tileset ausgewählt wird und dann an Position 1,1 auf ein MapSurface gezeichnet wird. Und so entsteht dann die ganze Welt. Später wird dann in BeginScene() immer nur das gezeichnet was man sieht , von der map.
Tja und das lädt jetzt auf meinem amd 1,5 ghz so 5 sekunden lang am Anfang das heisst auf nem längsämeren pc dauert das dann schon sehr lange , und das ist schade da in 3d Spielen oder z.b. in Diablo wesentlich grössere Grafiken geladen werden müssen und das auch net so lange geht. Nun ich könnte ja nur das zeichnen was man sieht ohne es zuerst auf das MapSurface zu zeichnen. Das ist ja schön und gut, aber es gibt nen grossen ruck wenn ich eine Reihe tiles hineinkopiere und das ist unbrauchbar. Und mein grösster Wunsch wäre es jetzt das so umzusetzen das alles wie bisher aussieht aber die Ladezeit kürzer ist :-/.

Ich kann wenn ihr wollt auch noch funktionen hier zeigen , wie ich das mache vielleicht hilft das ja.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL Alle Zeiten sind GMT
Gehe zu Seite 1, 2, 3  Weiter
Seite 1 von 3

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum