Seite 1 von 1

Spiel wird langsamer?

Verfasst: 16.11.2008 15:00
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

Verfasst: 16.11.2008 15:11
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 ?

Verfasst: 16.11.2008 15:17
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

Verfasst: 16.11.2008 15:58
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

Verfasst: 16.11.2008 16:00
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