Programm wird lahm

Anfängerfragen zum Programmieren mit PureBasic.
Drago
Beiträge: 148
Registriert: 02.02.2010 18:22
Computerausstattung: Win XP SP3, AMD Sempron (MMX) 1.2 GHz, 512 MB, Nvidia GeForce FX 5200, 128 MB, DirectX 9.0c
Wohnort: Westerwald

Programm wird lahm

Beitrag von Drago »

Hallo Leute !

Das Programm wird richtig lahm und ich weis nicht woran es liegt.
Habe mal etwas Code zusammen gebastelt, damit ihr seht was ich
meine.

Code: Alles auswählen

EnableExplicit
;**************************************************************************************************************************
;                                            Konstanten declarieren
;**************************************************************************************************************************
#ScreenWidth = 1024
#ScreenHeigth = 768

If InitSprite() = 0 Or InitKeyboard() = 0 Or InitSprite3D() = 0 Or InitSound() = 0 Or InitMouse() = 0
  MessageRequester( "Error", "Can't open DirectX 7 or later", 0 )
  End
EndIf

If OpenScreen( #ScreenWidth, #ScreenHeigth, 32, "Test3D", 0 ) = 0
  MessageRequester( "Error", "Can't open Screen", 0 )
  End
EndIf

Define Font1.l
Define Pure.l
Define i.l
Define r.l
Define Sprite1.l

Font1 = LoadFont( #PB_Any , "Arial", 120, #PB_Font_Bold ) 

ClearScreen( RGB( 1, 1, 1 ) )

StartDrawing( ScreenOutput() )

DrawingFont( FontID( Font1 ) )
DrawingMode( #PB_2DDrawing_Transparent )
DrawText( 3, 3, "PURE BASIC", RGB( 0,0,0 ) )
DrawingMode( #PB_2DDrawing_Outlined )
Box( 0, 0, 1024, 200, RGB( 255, 0, 0 ) )

StopDrawing()

Pure = GrabSprite( #PB_Any, 0, 0, 1024, 200, #PB_Sprite_Texture )
Pure = CreateSprite3D( #PB_Any, Pure )
Define i.l
Define Col.l
Define Sprite1.l

Repeat
  
  ClearScreen( RGB( 1, 1, 1 ) )
  
  StartDrawing( ScreenOutput() )
  
For i = 0 To 14
  
  Box( 0, 230 + i * 21, 1024, 20, RGB( Random( 50 ) + 200, Random( 50 ) + 200, Random( 50 ) + 200 ) )
  
Next 
  
StopDrawing()

Start3D()

Sprite3DQuality( 1 )
ZoomSprite3D( Pure, 1024,  500 )
DisplaySprite3D( Pure, 0, 150, 255 )

Stop3D()

If IsSprite( Sprite1 ): FreeSprite( Sprite1 ): EndIf
If IsSprite3D( Sprite1 ): FreeSprite3D( Sprite1 ): EndIf
Sprite1 = GrabSprite( #PB_Any, 0, 150, 1024, 500, #PB_Sprite_Texture )
Sprite1 = CreateSprite3D( #PB_Any, Sprite1 )

Start3D()
Sprite3DQuality( 1 )
ZoomSprite3D( Sprite1, 150, 50 )
RotateSprite3D( Sprite1, r, 0 )
DisplaySprite3D( Sprite1, 400, 100, 255 )

r + 1
If r = 360: r = 0:EndIf

Stop3D()

FlipBuffers()

  ExamineKeyboard()
Until KeyboardPushed( #PB_Key_Escape )
End
Benutzeravatar
The_Dark_Zim-.-
Beiträge: 372
Registriert: 18.03.2008 16:53

Re: Programm wird lahm

Beitrag von The_Dark_Zim-.- »

Hey

"GrabSprite()" ist/scheint sehr langsam zu sein ;)
PB: 5.xx LTS x86/x64 | WIN: 10 Pro x64, Linux Mint x64
Drago
Beiträge: 148
Registriert: 02.02.2010 18:22
Computerausstattung: Win XP SP3, AMD Sempron (MMX) 1.2 GHz, 512 MB, Nvidia GeForce FX 5200, 128 MB, DirectX 9.0c
Wohnort: Westerwald

Re: Programm wird lahm

Beitrag von Drago »

Aber soooooo lahm ? Ist doch nichts zu tun.....
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Programm wird lahm

Beitrag von NicTheQuick »

Ohne mich mit der Sprite-Sache auszukennen und ohne den Code zu testen, tippe ich auf folgendes:

Code: Alles auswählen

Sprite1 = GrabSprite( #PB_Any, 0, 150, 1024, 500, #PB_Sprite_Texture )
Sprite1 = CreateSprite3D( #PB_Any, Sprite1 )
Du erstellst ein Sprite namens 'Sprite1' und danach daraus ein Sprite3D ebenfalls mit Namen 'Sprite1'. Damit ist das erste Sprite verschollen und es wird niemals freigegeben. Speicher dein Sprite3D doch in der Variable 'Sprite3D1' oder so ähnlich. Dann klappt's auch mit der Lahmheit.
Drago
Beiträge: 148
Registriert: 02.02.2010 18:22
Computerausstattung: Win XP SP3, AMD Sempron (MMX) 1.2 GHz, 512 MB, Nvidia GeForce FX 5200, 128 MB, DirectX 9.0c
Wohnort: Westerwald

Re: Programm wird lahm

Beitrag von Drago »

@NicTheQuick:

Das habe ich eben auch gemacht, wollte es gerade hier rein stellen,
du warst aber schaneller.

Vielen lieben Dank....
Antworten