Speed-Probleme
Übersicht

![]() |
Cevil01Betreff: Speed-Probleme |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi, hab mit dem unten stehenden code wird meine Map gezeichnet. Das ganze ergibt bei mir eine framerate von etwa 30 wenn ich nur den dungeon mit 30% walls zeichnen lasse ![]() Das Programm läuft als exe ohne debugmodus mit fullscreen 1024*768*16 ich hab nen atlon amd 1900+.... Die tiles sind 16*16 mapWidth=50 mapHeight=25 also werden 50*25 floortiles, 30%*50*25 walltiles, und für jedes walltiles nochmal maximal 4 seperators gezeichnet... = ca 8000 (die seperators grenzen die walltiles durch linien vom boden ab und sind auch 16*16, mit dem line befehl isses noch langsamer...) Meine Frage: WAS ZUR HÖLLE MACHE ICH FALSCH!? is irgendein befehl besonders langsam??? oder ist bb wirklich SO schwach!? Code: [AUSKLAPPEN] Function drawMap(x,y,mapNr) For xC=1 To mapWidth For yC=1 To mapHeight DrawImage floors,xC*chipSize+x,yC*chipSize+y,map(mapNr,xC,yC,0) If map(mapNr,xC,yC,1)>0 Then DrawImage walls,xC*chipSize+x,yC*chipSize+y,map(mapNr,xC,yC,1)-1 If setSeperators=False Goto noseps If yc<mapHeight then If map(mapNr,xC,yC+1,1)=0 Then DrawImage seperators,xC*chipSize+x,yC*chipSize+y,3 End If Else DrawImage seperators,xC*chipSize+x,yC*chipSize+y,3 End if If yc>1 then If map(mapNr,xC,yC-1,1)=0 Then DrawImage seperators,xC*chipSize+x,yC*chipSize+y,1 End If Else DrawImage seperators,xC*chipSize+x,yC*chipSize+y,1 End if If xc<mapWidth then If map(mapNr,xC+1,yC,1)=0 Then DrawImage seperators,xC*chipSize+x,yC*chipSize+y,2 End If Else DrawImage seperators,xC*chipSize+x,yC*chipSize+y,2 End if If xc>0 then If map(mapNr,xC-1,yC,1)=0 Then DrawImage seperators,xC*chipSize+x,yC*chipSize+y,0 End If Else DrawImage seperators,xC*chipSize+x,yC*chipSize+y,0 End If .noseps End if Next Next End function |
||
konstantin |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
es muss nicht zwangsläufig an dieser funktion liegen | ||
![]() |
Cevil01 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Alu hat Folgendes geschrieben: es muss nicht zwangsläufig an dieser funktion liegen
hmmmm nene mehr is nich drin hauptcode is dann praktisch repeat drawMAP(1,1,1) flip() until keydown() |
||
![]() |
Cevil01 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nochn test gemacht:
Code: [AUSKLAPPEN] Include "fps.bb" header(1024,768,0,1) floors=loadanimimage(currentDir()+"Data\floors.png",16,16,0,20) Repeat Color 255,255,255 Rect 0,0,1024,768,1 For i=1 To 8000 DrawImage floors,rand(0,1024),rand(0,768),rand(0,19) Next checkfps() showFps() Flip() Until KeyDown(1) End Function header(winResX,winResY,winColorDepth,winMode) Graphics winResX,winResY,winColorDepth,winMode SetBuffer BackBuffer() AutoMidHandle 1 TFormFilter 0 SeedRnd MilliSecs () Color 255,255,255 End Function mit jedem wert für die tileanzahl über 800 - 900 brechen die frames total ein... einer nen plan an wases liegt? freund hatte die gleichen ergebnisse, kanns an den bildern liegen??? oder isses so lahm und wenn ja wie macht ihr dann spiele mit tiles |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
8000 Tiles einzeichnen ist heftig, da machen (die heute auf 3D -Operationen optimierten) GraKas einfach schlapp.
Zur Lösung gibt es prinzipiell 2 Möglichkeiten: 1. erstelle Sprites und benutze 3D als 2D (kA wie gut die Performance dann noch ist, sie sollte aber auf Grund der Hardwarebeschleunigung von 3D wesentlich höher liegen.) 2. Zeichne den festen Kladderatdatsch nur einmal ein, speichere das ganze als Image und zeichne im Falle einer Bewegung nur die neu hinzukommenden Tiles dazu. Mach ich auch so und schwupp rennt es wieder. Ich werd jedoch demnächst auf die 3D-Geschichte umsteigen (falls mich Bmax nicht vorher endgültig assimiliert hat - mir schwant da böses, alle Projekte auf OO umstellen...) |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
Apocalyptic |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Meinst du nicht, dass du die Anzahl der zu zeichnenden Tiles optimieren kannst? | ||
Suum cuique
[ www.ffs-net.de.vu ] [ Raycaster ] |
![]() |
Cevil01 |
![]() Antworten mit Zitat ![]() |
---|---|---|
BladeRunner hat Folgendes geschrieben: 2. Zeichne den festen Kladderatdatsch nur einmal ein, speichere das ganze als Image und zeichne im Falle einer Bewegung nur die neu hinzukommenden Tiles dazu. Mach ich auch so und schwupp rennt es wieder. Ich werd jedoch demnächst auf die 3D-Geschichte umsteigen (falls mich Bmax nicht vorher endgültig assimiliert hat - mir schwant da böses, alle Projekte auf OO umstellen...) kk thx so hab ichs jetzt gemacht... der floor wird mit grabimage abgelichtet und gespeichert, die seperators muss ich weglassen oder es aufwendiger machen, da die walls nicht fest sind, sie können sich ständig ändern... |
||
![]() |
rambo256 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du kannst es auch mit Culling bzw. Clipping probieren.
Das bedeutet,das du auch nur wirklich das zeichnest was auch auf dem Bildschirm zu sehen ist. Das bringt sicherlich viel speed! Dafür gibt es einen ganz einfachen Algo ![]() |
||
Asus F53z
Das Leben ist eine reine Konkatenation... |
![]() |
Hummelpups |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, das habe ich auch gerade bemerkt, du fragst ab, ob die Tiles
kleiner als die wirklich Mapgröße ist, dennoch nicht, ob die Tiles auch wirklich sichtbar sind. Das solltest du auf jeden Fall verbessern. IMurDOOM |
||
blucode - webdesign - Ressource - NetzwerkSim
BlitzBasic 2D - BlitzMax - MaxGUI - Monkey - BlitzPlus |
morszeck |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Um dies ein wenig zu optimieren, verschiebe den ganzen Screen und aktualisiere nur die Stellen die sich auch ändern.
Mit 2 For_Next Schleifen kommst du hier aber nicht weiter. Erstelle ein Type, in dem alle Änderungen reinkommen, die dann abgearbeitet wird. |
||
![]() |
Cevil01 |
![]() Antworten mit Zitat ![]() |
---|---|---|
IMurDOOM hat Folgendes geschrieben: Ja, das habe ich auch gerade bemerkt, du fragst ab, ob die Tiles
kleiner als die wirklich Mapgröße ist, dennoch nicht, ob die Tiles auch wirklich sichtbar sind. Das solltest du auf jeden Fall verbessern. IMurDOOM ... das erledigt sich wohl bei ner map mit 50*25 tiles die 16*16 sind... |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group