PureBasic
https://www.purebasic.fr/french/

Module Parallax
https://www.purebasic.fr/french/viewtopic.php?f=6&t=17427
Page 1 sur 1

Auteur:  microdevweb [ Mer 12/Sep/2018 17:36 ]
Sujet du message:  Module Parallax

Image

Remarque : C'est le gif qui sacade, pas à la compilation :wink:

Voici module pour faire un fond en Parallax

Le zip depuis github

Maintenant je ne suis pas certain que ma technique soit bonne, cela prend pas de mal de ressource entre 20% et 28% du processeur c'est quant même bkp.<EDIT> Bon même si j'affiche pas les sprites c'est idem

exemple du code :

Code:
EnableExplicit
UsePNGImageDecoder()
#MainForm = 0
If Not InitSprite()
  MessageRequester("SYSTEM ERROR","cannot init sprite engine",#PB_MessageRequester_Error)
  End
EndIf
If Not InitKeyboard()
  MessageRequester("SYSTEM ERROR","cannot init keyboard engine",#PB_MessageRequester_Error)
  End
EndIf
If Not OpenWindow(#MainForm,0,0,800,600,"test",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
  MessageRequester("SYSTEM ERROR","cannot open window",#PB_MessageRequester_Error)
  End
EndIf
If Not OpenWindowedScreen(WindowID(#MainForm),0,0,WindowWidth(#MainForm),WindowHeight(#MainForm),#True,0,#PB_Screen_WaitSynchronization )
  MessageRequester("SYSTEM ERROR","cannot open the game screen",#PB_MessageRequester_Error)
  End
EndIf
IncludePath "Packages/"
XIncludeFile "PARALLAX.pbi"
UseModule PARALLAX
Global myParallax. Parallax = newParallax(0,0,800,600)
myParallax\addBackGround(newBackground("Assets/Parallax/plx-1.png",0))
myParallax\addBackGround(newBackground("Assets/Parallax/plx-2.png",0.1))
myParallax\addBackGround(newBackground("Assets/Parallax/plx-3.png",0.3))
myParallax\addBackGround(newBackground("Assets/Parallax/plx-4.png",0.4))
myParallax\addBackGround(newBackground("Assets/Parallax/plx-5.png",0.8))
Global gEvent,exit.b = #False
Repeat ; screen event
  Repeat ; window event
    gEvent = WindowEvent()
    If gEvent = #PB_Event_CloseWindow : exit = #True : EndIf
  Until gEvent = 0
  ClearScreen(RGB(255,255,255))
  myParallax\display(1)
  FlipBuffers()
Until  exit

Auteur:  boby [ Mer 12/Sep/2018 20:00 ]
Sujet du message:  Re: Module Parallax

Joli rendu, merci du partage.

Auteur:  Ar-S [ Mer 12/Sep/2018 21:16 ]
Sujet du message:  Re: Module Parallax

Sympa !
Chez moi ça prend de 0.8 à 1.1 % de charge. Donc rien à redire.

Auteur:  Micoute [ Jeu 13/Sep/2018 7:04 ]
Sujet du message:  Re: Module Parallax

Merci microdevweb pour le partage.

Auteur:  Fig [ Ven 14/Sep/2018 15:10 ]
Sujet du message:  Re: Module Parallax

Bonjour,
En utilisant tes images et la procédure de scrolling idoine, ça donne ça... 1.4% de CPU chez moi, et je scroll aussi l'arrière plan uniforme (ce qui ne sert à rien, j'en conviens).
Code:
Procedure Scroll(sprite.i, StepX.i, StepY.i)
    Protected SpriteW, SpriteH, y, Buffer, Pitch, PixelFormat, *Dest, *debut
    If StartDrawing(SpriteOutput(sprite))
        SpriteW = OutputWidth(): SpriteH = OutputHeight()
        StepX = (StepX + SpriteW) % SpriteW
        StepY = (StepY + SpriteH) % SpriteH
        If StepX = 0 And StepY = 0: StopDrawing(): ProcedureReturn: EndIf
        Buffer = DrawingBuffer()
        Pitch = DrawingBufferPitch()
        If StepX <> 0
            PixelFormat = DrawingBufferPixelFormat() & ~#PB_PixelFormat_ReversedY
            If PixelFormat >= #PB_PixelFormat_32Bits_RGB
                StepX <<2
            ElseIf PixelFormat >= #PB_PixelFormat_24Bits_RGB
                StepX * 3
            ElseIf PixelFormat >= #PB_PixelFormat_15Bits
                StepX <<1
            EndIf
            *Dest = AllocateMemory(StepX)
            For y = 0 To SpriteH - 1
                *debut = Buffer + Pitch * y
                CopyMemory(*debut, *Dest, StepX)
                CopyMemory(*debut + StepX, *debut, Pitch - StepX)
                CopyMemory(*Dest, *debut + Pitch - StepX, StepX)
            Next y
            FreeMemory(*dest)
        EndIf
        If StepY <> 0
            If DrawingBufferPixelFormat() & #PB_PixelFormat_ReversedY
                StepY = SpriteH - StepY ;reverse the Y value
            EndIf
            *Dest = AllocateMemory(Pitch * StepY)
            *debut = Buffer
            CopyMemory(*debut, *Dest, Pitch * StepY)
            CopyMemory(*debut + Pitch * StepY, *debut, Pitch * (SpriteH - StepY))
            CopyMemory(*Dest, *debut + Pitch * (SpriteH - StepY), Pitch * StepY)
            FreeMemory(*Dest)
        EndIf 
        StopDrawing()   
    EndIf
EndProcedure

UsePNGImageDecoder()
If InitSprite() = 0 Or InitKeyboard() = 0: MessageRequester("Error", "Can't open the sprite system", 0): End: EndIf
If OpenWindow(0, 0, 0, 800, 600, "Scroll Sprite", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) = 0: MessageRequester("Error", "Can't open windowed screen!", 0): EndIf
If OpenWindowedScreen(WindowID(0), 0, 0, 800, 600, 0, 0, 0) = 0: MessageRequester("Error", "Can't open windowed screen!", 0): EndIf   

For i=0 To 4
    LoadSprite(i,"plx-"+Str(i+1)+".png",#PB_Sprite_AlphaBlending)
    ZoomSprite(i,SpriteWidth(i)*2,SpriteHeight(i)*2)
Next i
Repeat
    WindowEvent()
    ExamineKeyboard()
    FlipBuffers()
    ClearScreen(#Black)
    For i=0 To 4
        Scroll(i,i+1,0) ;  Scroll(sprite, vitesse horizontale en pixel, vitesse verticale en pixel)
        DisplayTransparentSprite(i, ScreenWidth() / 2 - SpriteWidth(i) / 2,ScreenHeight() / 2-SpriteHeight(i)/2)
    Next i
Until KeyboardPushed(#PB_Key_Escape)

Falsam avait fait un superbe parallax sur ce principe mais je ne le retrouve pas... (le code, pas Falsam ... ^^)

Auteur:  pierre003 [ Ven 14/Sep/2018 17:36 ]
Sujet du message:  Re: Module Parallax

Bonsoir,
C’est super pour un programme aussi cours.
Chez moi c’est entre 0.3 et 0.7%

Auteur:  falsam [ Ven 14/Sep/2018 21:00 ]
Sujet du message:  Re: Module Parallax

Fig a écrit:
Falsam avait fait un superbe parallax sur ce principe mais je ne le retrouve pas... (le code, pas Falsam ... ^^)
ici viewtopic.php?p=193929#p193929 tout est dans le Zip

Le code permettant de scroller est de toi ^-^

Auteur:  Kwai chang caine [ Sam 15/Sep/2018 23:40 ]
Sujet du message:  Re: Module Parallax

Bel effet 8O
Merci à vous deux pour cette promenade en foret 8)

Auteur:  Shadow [ Dim 14/Oct/2018 19:13 ]
Sujet du message:  Re: Module Parallax

Jolie :D

Page 1 sur 1 Heures au format UTC + 1 heure
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/