Performanceproblem wenn sich zwei Sprites überlappen?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
The_Dark_Zim-.-
Beiträge: 372
Registriert: 18.03.2008 16:53

Beitrag von The_Dark_Zim-.- »

Wenn Delay kleiner ist kippt der Wert für die Frames ins minus :D
Wenn jemand die Frames anders darstellen kann, kann er's verbessern ;)
PB: 5.xx LTS x86/x64 | WIN: 10 Pro x64, Linux Mint x64
Benutzeravatar
Thalius
Beiträge: 476
Registriert: 17.02.2005 16:17
Wohnort: Basel / Schweiz

Beitrag von Thalius »

Kaeru Gaman hat geschrieben:wau.. auch bei 2D sprites, nich nur bei Sprite3D? O_O"
denk mal an DX9 ;) ( 2D Sprites sidn da ja auch nix anderes als gemapptes 3D )
"...smoking hash-tables until until you run out of memory." :P
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

Thalius hat geschrieben:
Kaeru Gaman hat geschrieben:wau.. auch bei 2D sprites, nich nur bei Sprite3D? O_O"
denk mal an DX9 ;) ( 2D Sprites sidn da ja auch nix anderes als gemapptes 3D )
ja is klar, allerdings hätte ich nicht gedacht, dass sich das in der performance so deutlich bemerkbar machen kann...

jedenfalls nicht bei drei, vier sprites, da müßten es doch schon hunderte sein...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
pureanfänger
Beiträge: 74
Registriert: 29.03.2008 15:22

Beitrag von pureanfänger »

Was mir allerdings aufgefallen ist, dass meine Sprites so Größen wie 234x217 haben. Sollte ich diese jedenfalls 234x234
erstellen oder würde in meinem Bsp. auch 234x218 gehen?

Macht es ein Unterschied, wenn ich PNG's verwende?


Also das mit dem Programm-Code ist so eine Sache, der umfasst mittlerweile ca 5000 Zeilen,
daher habe ich mal versucht nur den Spriteteil schematisch darzustellen:

Code: Alles auswählen

Repeat
    
  ExamineKeyboard() : ExamineMouse() 
    
  FlipBuffers(#PB_Screen_WaitSynchronization) 
  
  If IsScreenActive()  
    ClearScreen(RGB(0, 0, 0))
        
    DisplaySprite(#Spielfeld_Background, 0, 0)
    
    DisplayTransparentSprite(Feld_01.l, Feld_01_X.l, Feld_01_Y.l)  
    DisplayTransparentSprite(Feld_02.l, Feld_02_X.l, Feld_02_Y.l)  
    DisplayTransparentSprite(Feld_03.l, Feld_03_X.l, Feld_03_Y.l)  
    DisplayTransparentSprite(Feld_04.l, Feld_04_X.l, Feld_04_Y.l)  
    DisplayTransparentSprite(Feld_05.l, Feld_05_X.l, Feld_05_Y.l)  
    DisplayTransparentSprite(Feld_06.l, Feld_06_X.l, Feld_06_Y.l)  
    DisplayTransparentSprite(Feld_07.l, Feld_07_X.l, Feld_07_Y.l)  
    DisplayTransparentSprite(Feld_08.l, Feld_08_X.l, Feld_08_Y.l)  
    DisplayTransparentSprite(Feld_09.l, Feld_09_X.l, Feld_09_Y.l)  
    DisplayTransparentSprite(Feld_10.l, Feld_10_X.l, Feld_10_Y.l)  
    DisplayTransparentSprite(Feld_11.l, Feld_11_X.l, Feld_11_Y.l)  
    DisplayTransparentSprite(Feld_12.l, Feld_12_X.l, Feld_12_Y.l)  
    DisplayTransparentSprite(Feld_13.l, Feld_13_X.l, Feld_13_Y.l) 
    DisplayTransparentSprite(Feld_14.l, Feld_14_X.l, Feld_14_Y.l) 
    DisplayTransparentSprite(Feld_15.l, Feld_15_X.l, Feld_15_Y.l) 
    DisplayTransparentSprite(Feld_16.l, Feld_16_X.l, Feld_16_Y.l)  
    DisplayTransparentSprite(Feld_17.l, Feld_17_X.l, Feld_17_Y.l)  
    DisplayTransparentSprite(Feld_18.l, Feld_18_X.l, Feld_18_Y.l)  
    DisplayTransparentSprite(Feld_19.l, Feld_19_X.l, Feld_19_Y.l)  
    DisplayTransparentSprite(Feld_20.l, Feld_20_X.l, Feld_20_Y.l)  
    DisplayTransparentSprite(Feld_21.l, Feld_21_X.l, Feld_21_Y.l)  
    DisplayTransparentSprite(Feld_22.l, Feld_22_X.l, Feld_22_Y.l)  
    DisplayTransparentSprite(Feld_23.l, Feld_23_X.l, Feld_23_Y.l) 
    DisplayTransparentSprite(Feld_24.l, Feld_24_X.l, Feld_24_Y.l)     
    DisplayTransparentSprite(Feld_25.l, Feld_25_X.l, Feld_25_Y.l)  
    DisplayTransparentSprite(Feld_26.l, Feld_26_X.l, Feld_26_Y.l) 
    DisplayTransparentSprite(Feld_27.l, Feld_27_X.l, Feld_27_Y.l) 
    
    Start3D()
      DisplaySprite3D(0, 50, 122, Transparency_1.l)
      DisplaySprite3D(1, 50, 50, Transparency_2.l)  
      DisplaySprite3D(2, 1200, 20, Transparency_2.l)
      DisplaySprite3D(3, 250, 250, Transparency_2.l)  
      DisplaySprite3D(4, 250, 450, Transparency_2.l)  
    Stop3D()
      
    DisplaySprite(5, 400, 342)
    DisplaySprite(6, 400, 442)
    DisplaySprite(7, 400, 542)
    DisplaySprite(8, 400, 642)
 
Until Exit.b = 1
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

also, wenn du was tile-mäßiges machen willst, schau dir mal an wie man eine tile-engine wirklich baut.
http://www.purebasic.fr/german/viewtopi ... 634#116634

... und wenn du auf den n²-Vorteil abzielen willst, mach deine sprites 256x256 groß.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
The_Dark_Zim-.-
Beiträge: 372
Registriert: 18.03.2008 16:53

Beitrag von The_Dark_Zim-.- »

Uff 5000 Zeilen ... ich dachte du bist ein Anfänger :D
Ich hab bis Heute keines was über 800 Zeilen hat :D

Wenn die Felder alle gleich aussehen kannst du diese mehrmals darstellen und musst es nicht immer unter einen neuen namen laden. ;)
Wenn die Felder aus rechtecken bestehen brauchst du auch kein transparentessprite machen. (denke mal das zieht auch leistung)

Was hast du denn für Hardware? Evtl. ist dein Programm einfach zu mächtig für dein Pc ;)

Hm wenn die felder sich nicht bewegen kannst du sie doch sicher auch per for next Schleife an ihre Koordinaten bringen, das wäre kürzer.

Du kannst auch leistung Sparen wenn du dein FlipBuffers(#PB_Screen_WaitSynchronization) durch FlipBuffers(#PB_Screen_NoSynchronization) ersetzt (aber am besten nur wenn sich nichts bewegt :P )

Wenn ich was Falsches von mir gegeben hab Sagt es besser :D bin ja auch noch nicht der Beste :P

Edit: Ich benutze irgentwie viele Smilys ^^

Gruß Zim
PB: 5.xx LTS x86/x64 | WIN: 10 Pro x64, Linux Mint x64
Benutzeravatar
Deluxe0321
Beiträge: 336
Registriert: 19.05.2006 00:31
Kontaktdaten:

Beitrag von Deluxe0321 »

Uff 5000 Zeilen ... ich dachte du bist ein Anfänger

Code: Alles auswählen

DisplayTransparentSprite(Feld_01.l, Feld_01_X.l, Feld_01_Y.l)  
[...]
DisplayTransparentSprite(Feld_27.l, Feld_27_X.l, Feld_27_Y.l) 
so komm ich auch schnell auf 5k Zeilen :wink:

gruß marv
Ich habe keine Lösung, aber ich bewundere das Problem.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

The_Dark_Zim-.- hat geschrieben:Was hast du denn für Hardware? Evtl. ist dein Programm einfach zu mächtig für dein Pc ;)
"mächtig" würde ich das nicht unbedingt nennen, eher "kacke geschraubt".
man kann jede moderne Maschine in die Knie zwingen, wenn man scheiße programmiert.
klingt böse, is aber so!
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
pureanfänger
Beiträge: 74
Registriert: 29.03.2008 15:22

Beitrag von pureanfänger »

man kann jede moderne Maschine in die Knie zwingen, wenn man scheiße programmiert.
klingt böse, is aber so!
Da kann ich dir nur zustimmen, denke auch das es ein Fehler in meinem Code ist.
Benutzeravatar
The_Dark_Zim-.-
Beiträge: 372
Registriert: 18.03.2008 16:53

Beitrag von The_Dark_Zim-.- »

Ich weiß ja nicht was das Programm alles macht und was er für ein Pc hat ^^

Gruß Zim
PB: 5.xx LTS x86/x64 | WIN: 10 Pro x64, Linux Mint x64
Antworten