DisplaySprite mit gewollter Verzögerung

Für allgemeine Fragen zur Programmierung mit PureBasic.
Andi
Beiträge: 73
Registriert: 27.05.2008 17:29
Wohnort: Berlin

DisplaySprite mit gewollter Verzögerung

Beitrag von Andi »

Hi,
ich habe eine Art Tetris programmiert. Das funktioniert auch alles sehr gut. Aber ich möchte, dass die neue Position von Sprites, nachdem es ein Löschen der Sprites mit gleicher Farbe gegeben hat, mit etwas Verzögerung angezeigt wird - also eine Art Animation.

Im nachfolgenden Code habe ich mal das Problem auf den Kern reduziert, wie ich hoffe. Es werden drei Boxes mit unterschiedlicher Farbe angezeigt.
Wie kann ich erreichen, dass sie beim Starten des Codes nacheinander (beispielsweise mit 1 sec Abstand) angezeigt werden?

Code: Alles auswählen

Screen_Width = GetSystemMetrics_(#SM_CXSCREEN) 
Screen_Height = GetSystemMetrics_(#SM_CYSCREEN) 
Define Resolution.DEVMODE
Resolution.DEVMODE\dmSize = SizeOf(DEVMODE)
If EnumDisplaySettings_(0, #ENUM_REGISTRY_SETTINGS, @Resolution)
   col_depth = Resolution\dmBitsPerPel
EndIf

Enumeration
#sprite1
#sprite2
#sprite3
EndEnumeration

InitSprite()
InitKeyboard()

OpenScreen(Screen_Width, Screen_Height, col_depth, "Sprite-Example")

CreateSprite(#sprite1, 50, 50)
   StartDrawing( SpriteOutput(#sprite1) )
      Box(0, 0, 50, 50, #Red)
   StopDrawing()

CreateSprite(#sprite2, 50, 50)
   StartDrawing( SpriteOutput(#sprite2) )
      Box(0, 0, 50, 50, #Blue)
   StopDrawing()

CreateSprite(#sprite3, 50, 50)
   StartDrawing( SpriteOutput(#sprite3) )
      Box(0, 0, 50, 50, #Magenta)
   StopDrawing()

Repeat   
    ClearScreen(RGB(0,0,0)) 
    DisplaySprite(#sprite1, Screen_Width/2, 250)
    DisplaySprite(#sprite2, Screen_Width/2, 350)
    DisplaySprite(#sprite3, Screen_Width/2, 450)
    FlipBuffers()
    ExamineKeyboard()
Until KeyboardPushed(#PB_Key_Escape)
PB + B4X = greatest tools on earth
Win 10 | PB 5.72
Demivec
Beiträge: 49
Registriert: 22.02.2008 20:49
Wohnort: Utah, USA

Re: DisplaySprite mit gewollter Verzögerung

Beitrag von Demivec »

Verwenden von ElapseMilliseconds():

Code: Alles auswählen

Screen_Width = GetSystemMetrics_(#SM_CXSCREEN) 
Screen_Height = GetSystemMetrics_(#SM_CYSCREEN) 
Define Resolution.DEVMODE
Resolution.DEVMODE\dmSize = SizeOf(DEVMODE)
If EnumDisplaySettings_(0, #ENUM_REGISTRY_SETTINGS, @Resolution)
   col_depth = Resolution\dmBitsPerPel
EndIf

Enumeration
#sprite1
#sprite2
#sprite3
EndEnumeration

InitSprite()
InitKeyboard()

OpenScreen(Screen_Width, Screen_Height, col_depth, "Sprite-Example")

CreateSprite(#sprite1, 50, 50)
   StartDrawing( SpriteOutput(#sprite1) )
      Box(0, 0, 50, 50, #Red)
   StopDrawing()

CreateSprite(#sprite2, 50, 50)
   StartDrawing( SpriteOutput(#sprite2) )
      Box(0, 0, 50, 50, #Blue)
   StopDrawing()

CreateSprite(#sprite3, 50, 50)
   StartDrawing( SpriteOutput(#sprite3) )
      Box(0, 0, 50, 50, #Magenta)
   StopDrawing()
   
Define startTime = ElapsedMilliseconds(), elapsedSeconds.f, elapsedFractionalSeconds.f
Repeat   
    ClearScreen(RGB(0,0,0)) 
    elapsedSeconds = (ElapsedMilliseconds() - startTime) / 1000 ;  1 second = 1000 ms
    elapsedFractionalSeconds = elapsedSeconds - Int(elapsedSeconds)
    If elapsedSeconds > 0 
       If elapsedSeconds < 1
          DisplayTransparentSprite(#sprite1, Screen_Width/2, 250, 255 * elapsedFractionalSeconds)
       Else
          DisplaySprite(#sprite1, Screen_Width/2, 250)
       EndIf
    EndIf

    If elapsedSeconds > 1
       If elapsedSeconds < 2
          DisplayTransparentSprite(#sprite2, Screen_Width/2, 350, 255 * elapsedFractionalSeconds)
       Else
          DisplaySprite(#sprite2, Screen_Width/2, 350)
       EndIf
    EndIf

    If elapsedSeconds > 2
       If elapsedSeconds < 3
          DisplayTransparentSprite(#sprite3, Screen_Width/2, 450, 255 * elapsedFractionalSeconds)
       Else
          DisplaySprite(#sprite3, Screen_Width/2, 450)
       EndIf
    EndIf
  
    FlipBuffers()
    ExamineKeyboard()
Until KeyboardPushed(#PB_Key_Escape)
Bild
Andi
Beiträge: 73
Registriert: 27.05.2008 17:29
Wohnort: Berlin

Re: DisplaySprite mit gewollter Verzögerung

Beitrag von Andi »

Supi! Vielen Dank! :)
PB + B4X = greatest tools on earth
Win 10 | PB 5.72
Antworten