Tiles fressen meine Leistung

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

superSC

Betreff: Tiles fressen meine Leistung

BeitragMo, Sep 12, 2011 0:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Guten Morgen, Tag oder Abend
(jenachdem wo du gerade bist und wann du gerade ließt)

Ich hab mal wieder ein Problem mit einem Dim feld, oder eher den Tiles die es enthält.

Naja, es ist zwar kein Fehler, jedoch ein sehr sehr großes Problem.

Es geht darum dass, wenn ich mehr als die Hälfte des Bildschirms mit Tiles voll habe, wird mein Spiel um mindestens die Hälfte verlangsamt.

Ich hab leider keine Ahnung woran das liegt, das Problem ist aufgetaucht nachdem ich einen hintergrund zeichnen lassen hab, jedoch nachdem ich das wundervolle Drawimagerect funktiönchen auskommentiert habe, blieb es dabei. Ich dachte dann es liege an den updates der Map jedoch bin ich dort auch nicht richtig gewesen. Also frage ich mal: Kennt ihr das Problem? Wisst ihr vieleicht woran es liegen könnte? Und wenn ja, WORAN ?!?

mfg
SSC

Xeres

Moderator

BeitragMo, Sep 12, 2011 0:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Was ist den "langsam" bei dir? Wie viele FPS hast du vorher/nachher?
Wie viel zeichnest du? Generell zeichnet man nur das, was auf dem Bildschirm ist - wenn deine Karte größer ist als der Bildschirm solltest du nur das zeichnen, was tatsächlich sichtbar ist.

Benutze ggf. Millisecs um zu messen, wie viel Zeit bei welchen Funktionen drauf geht.

Ansonsten gilt wie immer: Zu dem Code könnte man wesentlich mehr sagen.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

superSC

BeitragMo, Sep 12, 2011 0:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich Zeichne immer nur dass was auch auf dem Bildschirm ist, also alles was x>0/y>0 und x<graphX/y<graphY also (graphX= X größe des Fensters usw.).

Ich weis nicht so recht wie ich das mit Millisecs machen soll, werd es mir aber morgen nach der Schule mal ansehen.

Und nun zu dem Problem, ich würde nur ungern meinen Gesamten Code hier veröffentlichen.

MFG bis morgen
SSC

Xeres

Moderator

BeitragMo, Sep 12, 2011 0:39
Antworten mit Zitat
Benutzer-Profile anzeigen
So in der Art kannst du die Zeit für bestimmte Teile des Codes messen:
BlitzBasic: [AUSKLAPPEN]
Local t = MilliSecs()
Foo()
DebugLog(MilliSecs()-t)
Stop
End

Function Foo()
;* Zeitintensives
Delay(1500)
End Function


Berechnest du die passenden Koordinaten für die Anzeige im voraus, oder gehst du trotzdem noch das ganze Array durch?
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Midimaster

BeitragMo, Sep 12, 2011 1:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Geschwindigkeitseinbruch trat ja nach Zeichnen des Hintergrundes auf. Möglicherweise wird versehentlich in der Hauptschleife immer wieder etwas geladen?

Gewöhne dir an in jeder Funktion und vor jedem zeitaufwändigem Arbeitsabschnitt eine Meldung mit DEBUGLOG ausgeben zu lassen. Dabei sieht man dann oft, das Teile des Codes immer wieder abgearbeitet werden, obwohl das nicht so geplant ist.

BlitzBasic: [AUSKLAPPEN]

....
Bild=LoadImage(Blabla...
DebugLog "Bild wird geladen"
...
Function WeissDerGeier()
.....
DebugLog "* * * Weis der Geier- Funktion"
.....
End Function


Natürlich musst du im BB-Menü "Programm - Debug-Enabled?" dazu aktivieren!


Vielleicht liest du auch mal mein "Fehler suchen"-Tutorial....

https://www.blitzforum.de/foru...hp?t=33510
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe

Pokoyo

BeitragMo, Sep 12, 2011 18:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,
die Darstellungsgeschwindigkeit hängt unter anderem auch von der Größe der Tiles ab. Je kleiner diese sind umso langsamer wirds.
Sollte das dein Problem sein : Tiles vorm Anzeigen in einen Imagebuffer schreiben oder einfach größere tiles verwenden.
Desweiteren besteht noch die Möglichkeit deine 3d hardware für die Tiles zu benutzen (B3D)
hoffe konnte dir helfen, gruß poko
|Win10 64bit|FX 8350@4,5 GHz|Asrock 990FX Killer Fatality|16GB HyperX|R9 290X|Blitz3D|BlitzMax|

skey-z

BeitragMo, Sep 12, 2011 19:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Also selbst mit meiner alten Gurke mit IntelGMA onboard Grafikkarte hatte ich keine Probleme mit normalen 32²px Tilesets, auch wenn ich über die Karte hinaus gezeichnet habe.

Ich schätze mal eher, dass das Problem wo anders liegen wird, aber so lange er uns keinen Code zur Verfügung stellt, können wir nur raten und nciht wirklich helfen.

Also entweder die wichtigen Programmteile mal hier rein schreiben, oder das Programm komplett ins Archiv hochladen.
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz
BAC#57: 2. Platz
Twitter

Pokoyo

BeitragMo, Sep 12, 2011 19:49
Antworten mit Zitat
Benutzer-Profile anzeigen
skey-z hat Folgendes geschrieben:
Also selbst mit meiner alten Gurke mit IntelGMA onboard Grafikkarte hatte ich keine Probleme mit normalen 32²px Tilesets, auch wenn ich über die Karte hinaus gezeichnet habe.


Bei einer Auflösung von 1920x1080 und 32px Tiles bekommst du sehr wohl Probleme, das sind dann nämlich schon über 2k kleine Bildchen die da angezeigt werden müssen.
Aber hast schon Recht wir können ja nur Vermutungen anstellen. Er muss ja nicht den ganzen Code posten. Pseudo reicht unter Umständen.
|Win10 64bit|FX 8350@4,5 GHz|Asrock 990FX Killer Fatality|16GB HyperX|R9 290X|Blitz3D|BlitzMax|

skey-z

BeitragMo, Sep 12, 2011 20:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Hehe, diese Auflösung hätte meine alte Kiste gar nicht anzeigen können Wink
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz
BAC#57: 2. Platz
Twitter
 

superSC

BeitragMo, Sep 12, 2011 21:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, mit dem Millisecs befehl habe ich eine nette kleine 38 beim Updaten der Map bekommen.

Des weiteren, ist es nur so langsam wenn ich über skype am telefonieren bin.

Nun möchte ich den scheiß trotzdem mal optimieren, und deshalb hier mal mein update_Map() code:

Code: [AUSKLAPPEN]
Function update_map()

   For y = 0 To Map_height-1
      For x = 0 To Map_width-1
      
         If x*32<(scrollx#*(-1))+graphX Then
            If x*32>(scrollx#*(-1))-48 Then
               If y*32<(scrolly#*(-1))+graphY Then
                  If y*32>(scrolly#*(-1))-48 Then
                     If map(x,y,5)<>0 Then DrawImage tilesetdark$,x*32+scrollx#,y*32+scrolly#,map(x,y,5)
                     If map(x,y,0)<>0 Then DrawImage tileset$,x*32+scrollx#,y*32+scrolly#,map(x,y,0)
                     If map(x,y,1)<>0 Then DrawImage entity$,x*32+scrollx#,y*32+scrollY#,map(x,y,1)
                     If grid=1 Then   Color 210,210,0 :  Rect x*32+scrollx#,y*32+scrolly#,32,32,0 : Color 255,255,255
                     If trig=1 Then   If map(x,y,2)<>0 Then DrawImage trigger$,x*32+scrollx#,y*32+scrollY#,map(x,y,2)
                  EndIf
               EndIf
            EndIf
         EndIf
         
         If map(x,y,0)<>0 Then
            map(x,y,3)=1
            map(x,y,4)=1
            If mode<>4 Then
               If map(x,y,0)<>3 And map(x,y,0)<>9 And map(x,y,0)<>10 And map(x,y,0)<>4 Then
                  map(x,y,5)=map(x,y,0)
               EndIf
            EndIf
            If map(x,y,3)<>2 Then
               If map(x,y,0)=9 Then map(x,y,3)=2 : map(x,y,4)=-5
               If map(x,y,0)=10 Then map(x,y,3)=2 : map(x,y,4)=-5
               If map(x,y,0)=11 Then map(x,y,3)=2 : map(x,y,4)=-5
               If map(x,y,0)=3 Then map(x,y,3)=0 : map(x,y,4)=-5
               If map(x,y,0)=4 Then map(x,y,3)=3 : map(x,y,4)=-5
            EndIf
         Else
            map(x,y,3)=0
            map(x,y,4)=-5
         EndIf
         
         
         
         
      Next
   Next
   
   
   
         ;GRASS WÄCHST
         If grasstimer>=200 Then
            For y = 0 To Map_height-1
               For x = 0 To Map_width-1
                  If x>0 And y>0 Then
                     If x<map_width And y<map_height Then
                        If map(x,y,0)=3 Then
                           If map(x,y,4)=-5
                        
                              If map(x,y+1,0)<>1 Then   ;wenn unter grass nicht erde dann,
                                 map(x,y,0)=0      ; grass weg!
                              EndIf
                           
                              If map(x+1,y+1,0)=1 Then
                                 If map(x+1,y,0)=0 Then
                                    map(x+1,y,0)=3
                                    map(x+1,y,4)=-6
                                 ElseIf map(x+1,y,0)=1 Then
                                    If map(x+1,y-1,0)=0 Then
                                       map(x+1,y-1,0)=3
                                       map(x+1,y-1,4)=-6
                                    EndIf
                                 EndIf
                              ElseIf map(x+1,y+1,0)=0 Then
                                 If map(x+1,y+2,0)=1 Then
                                    If map(x+1,y+1,0)=0 Then
                                       map(x+1,y+1,0)=3
                                       map(x+1,y+1,4)=-6
                                    EndIf
                                 EndIf
                              EndIf
                              
                              If map(x-1,y+1,0)=1 Then
                                 If map(x-1,y,0)=0 Then
                                    map(x-1,y,0)=3
                                    map(x-1,y,4)=-6
                                 ElseIf map(x-1,y,0)=1 Then
                                    If map(x-1,y-1,0)=0 Then
                                       map(x-1,y-1,0)=3
                                       map(x-1,y-1,4)=-6
                                    EndIf
                                 EndIf
                              ElseIf map(x-1,y+1,0)=0 Then
                                 If map(x-1,y+2,0)=1 Then
                                    If map(x-1,y+1,0)=0 Then
                                       map(x-1,y+1,0)=3
                                       map(x-1,y+1,4)=-6
                                    EndIf
                                 EndIf
                              EndIf
                           
                           EndIf
                           
                        EndIf
                     EndIf                     
                  EndIf
         
               Next
            Next
         grasstimer=0
         EndIf
         
         ;WASSER FLIEßT
         If watertimer>=50 Then
            For y = 0 To Map_height-1
               For x = 0 To Map_width-1
                  
                  If map(x,y,0)=10 Then      ;wenn normal Wasser
                     If map(x,y,4)=-5 Then
                     
                        If map(x,y-1,0)=0 Then   
                           map(x,y,0)=9      ;Wasser wird zu Oberflächen wasser
                        EndIf
                        
                        If map(x-1,y,0)=0 Or map(x-1,y,0)=3 Then
                           map(x-1,y,0)=10
                           map(x-1,y,4)=-6
                        ElseIf map(x-1,y,0)=4 Then
                           map(x-1,y,0)=5
                        EndIf
                        
                        If map(x+1,y,0)=0 Or map(x+1,y,0)=3 Then
                           map(x+1,y,0)=10
                           map(x+1,y,4)=-6
                        ElseIf map(x+1,y,0)=4 Then
                           map(x+1,y,0)=5
                        EndIf
                        
                        If map(x,y+1,0)=0 Or map(x,y+1,0)=3 Then
                           map(x,y+1,0)=10
                           map(x,y+1,4)=-6
                        ElseIf map(x,y+1,0)=4 Then
                           map(x,y+1,0)=5
                        EndIf
                     EndIf
                  EndIf
                     
                  If map(x,y,0)=9 Then
                     If map(x,y,4)=-5 Then
                     
                        If map(x,y-1,0)<>0 Then
                           map(x,y,0)=10
                        EndIf
                        
                        If map(x-1,y,0)=0 Or map(x-1,y,0)=3 Then
                           map(x-1,y,0)=10
                           map(x-1,y,4)=-6
                        ElseIf map(x-1,y,0)=4 Then
                           map(x-1,y,0)=5
                        EndIf
                        
                        If map(x+1,y,0)=0 Or map(x+1,y,0)=3 Then
                           map(x+1,y,0)=10
                           map(x+1,y,4)=-6
                        ElseIf map(x+1,y,0)=4 Then
                           map(x+1,y,0)=5
                        EndIf
                        
                        If map(x,y+1,0)=0 Or map(x,y+1,0)=3 Then
                           map(x,y+1,0)=10
                           map(x,y+1,4)=-6
                        ElseIf map(x,y+1,0)=4 Then
                           map(x,y+1,0)=5
                        EndIf
                     EndIf
                  EndIf
               Next
            Next
            watertimer=0
         EndIf
         
         ;LAVA FLIEßT
         If lavatimer>=200 Then
            For y = 0 To Map_height-1
               For x = 0 To Map_width-1
                  If map(x,y,0)=4 Then
                     If map(x,y,4)=-5 Then
                        
                        If map(x+1,y,0)=0 Or map(x+1,y,0)=3 Then
                           map(x+1,y,0)=4
                           map(x+1,y,4)=-6
                        EndIf
                        
                           If map(x-1,y,0)=0 Or map(x-1,y,0)=3 Then
                        map(x-1,y,0)=4
                           map(x-1,y,4)=-6
                        EndIf
                     
                        If map(x,y+1,0)=0 Or map(x,y+1,0)=3 Then
                           map(x,y+1,0)=4
                           map(x,y+1,4)=-6
                        EndIf
                     EndIf
                  EndIf
               Next
            Next            
            lavatimer=0
         EndIf

   watertimer=watertimer+1
   grasstimer=grasstimer+1
   lavatimer=lavatimer+1

End Function



und jetzt lacht mich nicht aus xD

Eigentlich geht das mit dem 1024x768 Bildschirmbreite und 32²px pro tile Very Happy

Pokoyo

BeitragMo, Sep 12, 2011 22:01
Antworten mit Zitat
Benutzer-Profile anzeigen
hmmmm, bei einem 3 dimensionalen array ist es besser wenn man für die 3. dimension Konstanten anlegt um auch nach 2 tagen noch zu wissen was man da programmiert hat^^

Beispiel :Code: [AUSKLAPPEN]

 If map(x,y,0)=9 Then map(x,y,3)=2 : map(x,y,4)=-5

besser so :

Code: [AUSKLAPPEN]
 If map(x,y,Tile_Typ)=9 Then map(x,y,Tile_Eigenschaft1)=2 : map(x,y,Tile_Eigenschaft2)=-5

Wenn man nun wüsste was da in deinen Feldern passiert könnte man vlt. was dazu sagen.....

Ein paar Ausdrücke könnte man vorberechnen, daran wirds allerdings nicht liegen. Und warum sind deine Images Strings ? Code: [AUSKLAPPEN]
 tilesetdark$


All diese Abfragen kommen bei jedem Tile :

Code: [AUSKLAPPEN]

If x*32<(scrollx#*(-1))+graphX Then
If x*32>(scrollx#*(-1))-48 Then
If y*32<(scrolly#*(-1))+graphY Then
If y*32>(scrolly#*(-1))-48 Then


Die Pixelgenaue Position brauchst du nur einmal am anfang errechnen. danach hängst du die anderen Tiles einfach dran.
Ob das allerdings die bremse ist ? mhmmm.....
|Win10 64bit|FX 8350@4,5 GHz|Asrock 990FX Killer Fatality|16GB HyperX|R9 290X|Blitz3D|BlitzMax|

Eingeproggt

BeitragMo, Sep 12, 2011 22:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Größter Optimierungstipp: DrawBlock statt DrawImage verwenden. Macht zumindest beim untersten Map-Layer keine Probleme und spart je nach Graphikkarte ordentlich Leistung.
Minimalere Optimierungsmöglichkeiten wären dann so Sachen wie Pokoyo angesprochen hat: y*32 zwischenspeichern, überlegen ob Abfragen "hervor gezogen" werden können...

mfG, Christoph
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

Xeres

Moderator

BeitragMo, Sep 12, 2011 22:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Das hier wird ein Problem sein:
Code: [AUSKLAPPEN]
;GRASS WÄCHST
         If grasstimer>=200 Then
            For y = 0 To Map_height-1
               For x = 0 To Map_width-1

If watertimer>=50 Then
            For y = 0 To Map_height-1
               For x = 0 To Map_width-1

If lavatimer>=200 Then
            For y = 0 To Map_height-1
               For x = 0 To Map_width-1

Du machst 3x soviel wie nötig - pack die Timer nochmal in die Schleifen und arbeite alle Änderungen in einem Rutsch ab.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

superSC

BeitragMo, Sep 12, 2011 22:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Das problem bei Drawblock ist dass es die Transparenz ignoriert.

Da ich aber Gras wachsen lasse, auf meinem wundervollen Dreck, und jenes wundervolle Gras nicht noch einen nicht so wundervollen pinken block beinhalten soll, funktioniert dass leider nicht so gut ^^

zu den sachen mit den string bildern, keine ahnung, ich hab das irgendwie schon immer so gemacht ^^


EDIT: stimmt, ich könnte die 3 timer in einen packen, dann müsste ich einfach nur mal mehr abfragen lassen.

Eingeproggt

BeitragMo, Sep 12, 2011 22:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, ignoriert Transparenz... aber das is doch zumindest bei den "untersten Bildern" wurscht... ich weiß ja nicht genau wie dein System ausschaut, aber sozusagen der Boden hat ja keine durchsichtigen Stellen, folglich brauchts da kein DrawImage.
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

Midimaster

BeitragMo, Sep 12, 2011 23:49
Antworten mit Zitat
Benutzer-Profile anzeigen
38 msec pro Durchlauf sind noch keine Katastrophe. Vor allem würdest Du dass noch nicht "merken". Denn selbst dabei kommst Du noch auch 26 fps.

Ich hab mal Deinen Code mit dieser Test-Umgebung laufen lassen...
BlitzBasic: [AUSKLAPPEN]
Graphics 1024,768
SetBuffer BackBuffer()
Global Map_Height%=40
Global Map_Width%=40

Dim Map(50,50,11)
For i=0 To 50
For j=0 To 50
For k=0 To 10
Map(i,j,k)=1
Next
Next
Next

Global TileSetDark=CreateImage(32,32,10)
Global TileSet$=CreateImage(32,32,10)
Global Entity$=CreateImage(32,32,10)
Global Trigger$=CreateImage(32,32,10)
Global GraphX=2000
Global GraphY=1000
Global Grid%=1 , Trig%=1
FPS=CreateTimer(20)
Repeat
Zeit=MilliSecs()
Update_Map
DebugLog MilliSecs()-Zeit
Flip 1
WaitTimer fps
Until KeyHit(1)




Function update_map()
Zeit2=MilliSecs()
For y = 0 To Map_height-1
For x = 0 To Map_width-1
......
Next
Next
DebugLog "-----" + (MilliSecs()-Zeit2)
End Function





Und selbst wenn man den Code so manipuliert, dass man immer überall alle möglichen Tiles zeichnen lässt kommt man nur auf 30 msec Zeitverbrauch für die Funktion (gemessen auf meinem ältesten Notebook mit 32MB Onboard-Grafikkarte). Die gesamte Zeit wird im oberen Teil mit den DrawImage verbraten. Als brauchst Du noch keine Optimierung für den unteren Teil der Funktion zu planen.

Allerdings fühlt sich das Programm damit nicht "langsam" an! Beschreibe mal, wie sich das "langsam" bei Dir anfühlt, oder bemerkbar macht...

Du schreibst...
Zitat:
...wenn ich mehr als die Hälfte des Bildschirms mit Tiles voll habe,...

ist das so eine Art "Tile-Editor"? Oder warum gibt es Situationen, in denen nur die Hälfte des Bildschirms voller Tiles ist?


Dann wäre noch eine wichtige Angabe, um welche Grafikkarte es sich handelt.

Ich tippe eher auf eine Auslastung des Systems. Maile doch mal die Hauptschleife, also alles zwischen REPEAT und UNTIL. Benutzt Du einen CreateTimer()? Benutzt Du FLIP 0?
 

superSC

BeitragMi, Sep 14, 2011 21:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, es lag anscheinend daran, dass ich vieleicht ein paar programme zu viel laufen hatte, denn jedesmal wenn ich über skype am telefonieren bin, läuft es langsam, wenn ich nicht am telefonieren bin, läuft es perfekt.

Des weiteren: Ja es ist auch ein Editor, aber ich meinte es eher folgender masen, wenn ich den halben bildschirm mit Tiles bezeichnen lasse, fängt es an, ziemlich langsam zu laufen. Es verliert undgefähr auf einmal die hälfte an geschwindigkeit.

@Eingeproggt, ich brauche die Transparenz weil ich z.B. bei den grass Tiles(welche wirklich NUR das grass beinhalten, und nicht z.B. wie bei Minecraft der dreck einfach zu grass geändert wird.) auch den hintergrund zwischen den einzelnen halmen sichtbar machen will,(falls ich es noch nicht erwähnt habe, ist es ein Jump'N'Run spiel, also von der Seite gesehen) und auch z.B. bei den Bäumen also bei den Blättern die transparenz haben möchte.

Die grafikkarte: Ich habe eine Sapphire HD 6790 1GB GDDR5 PCI Express
Ich hoffe mal dass ihr damit was anfangen könnt.

mfg
SSC

PSY

BeitragMi, Sep 14, 2011 21:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Pokoyo hat Folgendes geschrieben:

Bei einer Auflösung von 1920x1080 und 32px Tiles bekommst du sehr wohl Probleme, das sind dann nämlich schon über 2k kleine Bildchen die da angezeigt werden müssen.
Aber hast schon Recht wir können ja nur Vermutungen anstellen. Er muss ja nicht den ganzen Code posten. Pseudo reicht unter Umständen.


2000 tiles sind nix. musst sie halt im imageram bewegen und den screen dann capturen.
hab bei 1920x1080 und 32px tiles ne FPS rate von 2260 ^^

Code: [AUSKLAPPEN]
Graphics 1920,1080,32
SetBuffer BackBuffer()
Dim gfx(9)
 
Local i%, x%, y%, xmap%=0, ymap%=0, im%

; 32x32er boxen erstellen + einfärben
For i=0 To 9
   Color Rnd(255), Rnd(255), Rnd(255)
   Rect 0,0,32,32,1
    gfx(i)=CreateImage(32,32)
    GrabImage gfx(i),0,0
Next
Color 255,255,255

;speedfactor (anzahl pixel die gescrolled werden)
Local speed%=2
 
Dim level(99,99)

; 100x100 screen
Local back%=CreateImage(3200,3200)
SetBuffer ImageBuffer(back)
For x=0 To 99
   For y=0 To 99
      im=Rand(9)     
      level(x,y)=im
      DrawImage gfx(im),x*32,y*32
   Next
Next
SetBuffer BackBuffer()

Repeat
   Cls
   If KeyDown(203)
      If xmap<0 And xmap>=-1280
         xmap=xmap+speed
      EndIf
   EndIf
 
   If KeyDown(205)
      If xmap>-1280 And xmap<=0
         xmap=xmap-speed
      EndIf
   EndIf
 
   If KeyDown(200)
      If ymap<0 And ymap>=-1280-speed
         ymap=ymap+speed
      EndIf
   EndIf

   If KeyDown(208)
      If ymap>-1280 And ymap<=0
         ymap=ymap-speed
      EndIf
   EndIf
 
   DrawBlock back,xmap,ymap
   
   FPS_frames = FPS_frames + 1
   If FPS_timer + 1000 < MilliSecs()
      FPS_fps = FPS_frames
      FPS_frames = 0
      FPS_timer = MilliSecs()
   EndIf
   Text 70,40,FPS_fps
   
   Flip 0
   
Until KeyHit(1)
 
End


L8er,
PSY
PSY LABS Games
Coders don't die, they just gosub without return
  • Zuletzt bearbeitet von PSY am Do, Sep 15, 2011 6:27, insgesamt 2-mal bearbeitet

Midimaster

BeitragMi, Sep 14, 2011 22:05
Antworten mit Zitat
Benutzer-Profile anzeigen
@psy...

genau! was ich sage... das kann umöglich an den Tiles liegen. Und schon gar nicht mit der Grafikkarte.

Vielleicht stellt superSC ja mal doch noch die Main-Schleife rein....?

Es wäre für alle dann viel leichter, als ewig so im Trüben rumzueiern.

Also superSC!!! Bitte stell nun wirklich mal was rein, damit wir fundiert helfen können!!!
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group