Seite 2 von 3

Verfasst: 31.07.2009 18:12
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 ;)

Verfasst: 31.07.2009 18:12
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 )

Verfasst: 31.07.2009 18:15
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...

Verfasst: 31.07.2009 19:23
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

Verfasst: 31.07.2009 19:44
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ß.

Verfasst: 31.07.2009 19:47
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

Verfasst: 31.07.2009 19:50
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

Verfasst: 31.07.2009 20:04
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!

Verfasst: 31.07.2009 20:57
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.

Verfasst: 31.07.2009 21:14
von The_Dark_Zim-.-
Ich weiß ja nicht was das Programm alles macht und was er für ein Pc hat ^^

Gruß Zim