PureBasic

Forums PureBasic
Nous sommes le Lun 19/Nov/2018 12:28

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 9 messages ] 
Auteur Message
 Sujet du message: Module Parallax
MessagePosté: Mer 12/Sep/2018 17:36 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 29/Juin/2011 14:11
Messages: 1555
Localisation: Belgique
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

_________________
Linux Mint / Windows 10 64 bits PB: 5.61 ; 5.62 beta


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Module Parallax
MessagePosté: Mer 12/Sep/2018 20:00 
Hors ligne

Inscription: Jeu 07/Juin/2007 22:54
Messages: 177
Joli rendu, merci du partage.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Module Parallax
MessagePosté: Mer 12/Sep/2018 21:16 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 09/Oct/2005 16:51
Messages: 8529
Sympa !
Chez moi ça prend de 0.8 à 1.1 % de charge. Donc rien à redire.

_________________
~~~~Règles du forum ~~~~
.: Ar-S :. Tour + portable W10 x64 PB 5.4x / 5.6x
LDV MULTIMEDIA : Dépannage informatique Aude (11) Isère (38)
RESIZER GOLD : Mon logiciel de redimensionnement par lot


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Module Parallax
MessagePosté: Jeu 13/Sep/2018 7:04 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 02/Oct/2011 16:17
Messages: 2012
Localisation: 50200 Coutances
Merci microdevweb pour le partage.

_________________
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce GT 640 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.62, 5.70 LTS
Un homme doit être poli, mais il doit aussi être libre !


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Module Parallax
MessagePosté: Ven 14/Sep/2018 15:10 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 14/Oct/2004 19:48
Messages: 1111
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 ... ^^)

_________________
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 5.45LTS - 32 bits


Dernière édition par Fig le Ven 14/Sep/2018 20:49, édité 2 fois.

Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Module Parallax
MessagePosté: Ven 14/Sep/2018 17:36 
Hors ligne

Inscription: Ven 27/Mai/2016 8:27
Messages: 58
Localisation: 03
Bonsoir,
C’est super pour un programme aussi cours.
Chez moi c’est entre 0.3 et 0.7%

_________________
Toshiba satellite Windows 7 64bits


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Module Parallax
MessagePosté: Ven 14/Sep/2018 21:00 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 22/Aoû/2010 15:24
Messages: 6736
Localisation: IDF (Yvelines)
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 ^-^

_________________

➽ Config PureBasic : i3, RAM 4Go, NVidia (1024 Mo), Windows 10 - PB 5.45 LTS & PB 5.62
➽ Je papote aussi sur http://purebasic.chat & http://purebasic.chat/forum

➽ Restez informé Image Pure Basic Francophone Community

➽ Sites personnels http://falsam.com & EasySprite.js

➽ Je ne réponds pas aux MP techniques


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Module Parallax
MessagePosté: Sam 15/Sep/2018 23:40 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 23/Sep/2006 18:32
Messages: 6559
Localisation: Isere
Bel effet 8O
Merci à vous deux pour cette promenade en foret 8)

_________________
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Module Parallax
MessagePosté: Dim 14/Oct/2018 19:13 
Hors ligne

Inscription: Mer 04/Nov/2015 17:39
Messages: 932
Jolie :D

_________________
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 9 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Exabot [Bot] et 2 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye