Spiel wird langsamer?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
roherter
Beiträge: 1407
Registriert: 10.04.2005 18:58
Kontaktdaten:

Spiel wird langsamer?

Beitrag von roherter »

:mrgreen: Hi versuche mich gerade an meinem ersten Spiel.

Klappt auch alles nur wird es irgendwie immer langsamer je länger es läuft.
Vielleicht kann jemand schon am Code erkennen woran es liegt.Wie gesagt ich fange gerade erst an mich darein zu denken.

Wenn ihr ein ausführbares beispiel haben wollt sagt bescheid.

Code: Alles auswählen

Enumeration
  #screen
  #back1
  #back2
  #logo
  #base1
  #base2
  #base3
  #overlay1
  #overlay3d1
  #rahmen1
  #rahmen2
  #rahmen3
  #movie1
  #sound1
  #soundclick
  #kugel1
  #kugel2
  #kugel3
  #kugel4
  ;---
  #maus
  #mausclick
EndEnumeration
Structure fields
  posix.l
  posiy.l
EndStructure

NewList kugel1.fields()
NewList kugel2.fields()
NewList kugel3.fields()
NewList kugel4.fields()
a=0
UsePNGImageDecoder()
UseJPEGImageDecoder()
UseOGGSoundDecoder()
InitMovie()
InitKeyboard()
InitMouse()
InitSprite()
InitSprite3D()
InitSound()
If OpenScreen(800,600,32,"")
  ;-Sprites einbinden
 ;SetFrameRate(25)
  CatchSprite(#back2,?back2)
  CatchSprite(#base1,?base1)
  CatchSprite(#logo,?logo)
  CatchSprite(#kugel1,?kugel1)
  CatchSprite(#kugel2,?kugel2)
  CatchSprite(#kugel3,?kugel3)
  CatchSprite(#kugel4,?kugel4)
  CatchSprite(#maus,?maus)
  ;----
  CreateSprite(#overlay1,800,620,#PB_Sprite_Texture)
  CreateSprite3D(#overlay3d1,#overlay1)
  CreateSprite3D(#overlay3d1,#overlay1)
  ;-----
  LoadMovie(#movie1,"inc/movs/smoke1.mpg")
  LoadSound(#sound1,"inc/sounds/ss00384.ogg", #PB_Sound_Streaming)
  LoadSound(#soundclick,"inc/sounds/lighter-click.ogg")
  SoundVolume(#sound1,30)
  ;-------
  
  PlaySound(#sound1 );-Hintergrunsmusik
  PlayMovie(#movie1, #PB_Movie_Rendered );-Hintergrundvideo
  
 
  TransparentSpriteColor(#maus,$FFFFFF)
    TransparentSpriteColor(#base1,$000000)
  ;-
  Dim kugeln(40,40)
  For c=0 To 10
    For d=1 To 18
      
        kugeln(c, d) =Random(3)+1
     
  Next d
  Next c
  Repeat
    a=a+1
 FlipBuffers() 
    ClearScreen(RGB(0,0,0))
    ExamineKeyboard()
    ExamineMouse() 
    
  
    
    RenderMovieFrame(#movie1,SpriteID(#overlay1))
  
    DisplaySprite(#back2,0,0)
  
  If a<=186
  
    If a=62 
      PlayMovie(#movie1, #PB_Movie_Rendered )
    ElseIf a=124
       PlayMovie(#movie1, #PB_Movie_Rendered )
    EndIf
   
  Start3D()
    
    DisplaySprite3D(#overlay3d1,0,-10,55)
  Stop3D()
Else 
  FreeMovie(#movie1)
  ;DisplayTransparentSprite(#logo,800/2-320,600/2-220)
  
  Restore lev0
  c=0
  d=0
  For b=120 To 560 Step 40
    
   d=0
  For a=0 To 760 Step 40
  
    Read wert.l
    If wert=5:DisplaySprite(#base1,a,b)
    EndIf 
   
    If kugeln(c,d) = 1
      DisplayTransparentSprite(#kugel1,a,b)
      AddElement(kugel1())
      kugel1()\posix=a 
      kugel1()\posiy=b
    EndIf 
    If kugeln(c,d) = 2
      DisplayTransparentSprite(#kugel2,a,b)
      AddElement(kugel2())
      kugel2()\posix=a
      kugel2()\posiy=b
    EndIf 
    If kugeln(c,d) = 3
      DisplayTransparentSprite(#kugel3,a,b)
      AddElement(kugel3())
      kugel3()\posix=a
      kugel3()\posiy=b
    EndIf 
    If kugeln(c,d) = 4
      DisplayTransparentSprite(#kugel4,a,b)
      AddElement(kugel4())
      kugel4()\posix=a
      kugel4()\posiy=b
      
    EndIf 
   d=d+1
  
  Next
   
  c=c+1
 
Next 
;-maus

DisplayTransparentSprite(#maus,MouseX(),MouseY())
If MouseButton(#PB_MouseButton_Left)
  SoundVolume(#soundclick,60)
  PlaySound(#soundclick)
  
EndIf
;----
  

EndIf  

;-Collisonsabfrage
ResetList(kugel1())
ResetList(kugel2())
ResetList(kugel3())
ResetList(kugel4())
While NextElement (kugel1())
If SpritePixelCollision(#kugel1,kugel1()\posix,kugel1()\posiy,#maus,MouseX(),MouseY())
  

EndIf  
Wend 
While NextElement (kugel2())
  If SpritePixelCollision(#kugel2,kugel2()\posix,kugel2()\posiy,#maus,MouseX(),MouseY())
    
   
    
  EndIf  
  
Wend 
While NextElement (kugel3())
  If SpritePixelCollision(#kugel3,kugel3()\posix,kugel3()\posiy,#maus,MouseX(),MouseY())
  
    
  EndIf  
  
Wend 
While NextElement (kugel4())
  If SpritePixelCollision(#kugel4,kugel4()\posix,kugel4()\posiy,#maus,MouseX(),MouseY())
    
   
  EndIf  
  
Wend 
;------------------


;Hier werden die FPS berechnet und angezeigt
fps:
If Val(FormatDate("%ss", Date()))=sek
  fps+1
Else
  FPS$=Str(fps)
  fps=0
EndIf
sek=Val(FormatDate("%ss", Date()))
 
StartDrawing(ScreenOutput()) 
  DrawingMode(#PB_2DDrawing_Transparent)
  FrontColor(RGB(255,255,255))
  DrawText(331,21,"FPS: "+FPS$)
StopDrawing()

If KeyboardPushed(#PB_Key_Escape)   ; drücken Sie Esc zum Beenden
  FreeSound(#sound1):FreeMovie(#movie1)
  End
EndIf

ForEver 
EndIf

DataSection 
 
  back2:
  IncludeBinary "inc/img/back1.jpg"
  base1:
  IncludeBinary "inc/img/rand.jpg"
  logo:
  IncludeBinary "inc/img/Logo.png"
  kugel1:
  IncludeBinary "inc/img/1.bmp"
  kugel2:
  IncludeBinary "inc/img/2.bmp"
  kugel3:
  IncludeBinary "inc/img/3.bmp"
  kugel4:
  IncludeBinary "inc/img/4.bmp"
  maus:
  IncludeBinary "inc/img/maus.png"
  ;-level0
  
  lev0:
 
  Data.l 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5
  Data.l 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5
  Data.l 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5
  Data.l 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5
  Data.l 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5
  Data.l 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5
  Data.l 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5
  Data.l 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5
  Data.l 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5
  Data.l 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5
  Data.l 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5
  Data.l 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
  
 
EndDataSection
Purebasic 5.0 32bit und 64 bit

I'm back from hell
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

du setzt dein a nie auf 0

Oben :

Code: Alles auswählen

 Repeat 
    a=a+1 
 FlipBuffers() 
 ;...  
  If a<=186 
;...
aber weiter Unten wird das a jedesmal wieder auf 760 gesetzt

Code: Alles auswählen

For a=0 To 760 Step 40 
Next 
If a<=186 wird also nie wieder bearbeitet

EDIT: ach so, ich glaube das soll so sein oder ? Sehe da leider nicht ganz durch sry... Soll das ein INTRO am anfang sein oder was ?
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
roherter
Beiträge: 1407
Registriert: 10.04.2005 18:58
Kontaktdaten:

Beitrag von roherter »

Ja das ist ein Intro.
Geht runter bis auf 9 frames???

Hier ist ein ausführbares beispiel.

http://leolasoft-herter.de/mygame.rar
Purebasic 5.0 32bit und 64 bit

I'm back from hell
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

ää das movie läuft ok,

aber füge mal diese Zeile bei dem DrawingTeil ein :

Code: Alles auswählen

  DrawText(0,0,Str(ListSize(kugel1())))
ich glaube deine LinkedList wird immer größer ohne das du was löschst

Code: Alles auswählen

AddElement(kugel1())
und damit werde ja immer mehr Bilder angezeigt
Zuletzt geändert von STARGÅTE am 16.11.2008 16:01, insgesamt 1-mal geändert.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
roherter
Beiträge: 1407
Registriert: 10.04.2005 18:58
Kontaktdaten:

Beitrag von roherter »

Es lag an dem Problem mit der LinkedList habe jetzt:

Code: Alles auswählen

 ClearList(kugel1())
  ClearList(kugel2())
  ClearList(kugel3())
   ClearList(kugel4())
eingefügt jetzt gehts
Purebasic 5.0 32bit und 64 bit

I'm back from hell
Antworten