Speed-Probleme

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Cevil01

Betreff: Speed-Probleme

BeitragSo, Feb 06, 2005 18:56
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Question

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

BeitragSo, Feb 06, 2005 18:58
Antworten mit Zitat
Benutzer-Profile anzeigen
es muss nicht zwangsläufig an dieser funktion liegen

Cevil01

BeitragSo, Feb 06, 2005 19:12
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Feb 06, 2005 19:21
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BladeRunner

Moderator

BeitragMo, Feb 07, 2005 9:49
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Feb 07, 2005 18:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Meinst du nicht, dass du die Anzahl der zu zeichnenden Tiles optimieren kannst?
Suum cuique

[ www.ffs-net.de.vu ] [ Raycaster ]

Cevil01

BeitragDi, Feb 08, 2005 22:45
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Feb 08, 2005 23:03
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink
Asus F53z

Das Leben ist eine reine Konkatenation...

Hummelpups

BeitragMi, Feb 09, 2005 8:40
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Feb 09, 2005 9:38
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Feb 10, 2005 19:08
Antworten mit Zitat
Benutzer-Profile anzeigen
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...

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group