[2D] Sprite Scrolling

Programmation avancée de jeux en PureBasic
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: Sprite Scrolling

Message par Zorro »

Je me disais, que le clipSprite pour un effet de ce genre , c'etait pas evident a mettre en place :
(Attention Mal de Mer assuré )

Code : Tout sélectionner

macro M :macro:endmacro :M St:StartDrawing:Endmacro:
M TS:TransparentSpriteColor:Endmacro:M Sd:StopDrawing:EndMacro:
M DTS:DisplayTransparentSprite:Endmacro:M CS:CreateSprite:Endmacro:
M VS:val(StringField:Endmacro:M AA:amplitude:Endmacro
Enumeration:#Fenetre_principale:#sprite_fond;;;;;
#sprite_milieu:#sprite_devant:EndEnumeration;;;;;;;;;;;;;;;;;;;;;;;;;;
Declare.s F_(amplitude,x,y,angle):Declare CM(Adr$);;
Define.l EV;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Global StyleFen.i=#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered;
If Not (InitSprite() And InitSound() And InitKeyboard()):End:EndIf;;;;
Adr.s="http://multor.free.fr/Modules/VERSENIE.XM";;;;;;;;;;;;;;;;;;;;;
mus=CM(Adr.s):PlayMusic(Mus);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
OpenWindow(#Fenetre_principale,0,0,800,600,"Rotatif scroll",StyleFen);
If OpenWindowedScreen(WindowID(#Fenetre_principale),0,0,800,600,1,0,0)
CS(#sprite_fond,900,900);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
St(SpriteOutput(#sprite_fond)):For x=1 to 900-1 Step 10;;;;;
box(x,1,10,900,RGB(random(80,10),random(80,10),random(80,10))):Next x;
SD():CS(#sprite_milieu,900,900,;;;;;;;;;;;;;;;;;;;;
#PB_Sprite_AlphaBlending):St(SpriteOutput(#sprite_milieu));;
For x=1 to 900-1 Step 100:box(x,1,50,900,rgb(0,random(255,50),0));;;;;
Next x:SD():CS(#sprite_devant,900,900,;;;;;;;;;;;;;
#PB_Sprite_AlphaBlending):St(SpriteOutput(#sprite_devant));;
For i=1 to 500:Circle(Random(900-40),Random(900-40),10,Rgb(random(255,
50),random(255,50),random(255,50))):Next i:SD():Repeat:Repeat
EVent=WaitWindowEvent(2):Select EVent:Case #PB_Event_CloseWindow:End;;
EndSelect:Until EVent=0:retour.s=F_(50,-50,-100,anglef);;;;;;;;;
xf=VS(retour.s,1,"|")):yf=VS(retour.s,2,;;;;
"|")):anglef=anglef+2:DTS(#sprite_fond,xf,yf);;;;
retour.s=F_(100,-50,-100,anglem):xm=VS(retour.s,1,;
"|")):ym=VS(retour.s,2,"|")):anglem=anglem-3;;;;;;;;;;;;;
TS(#sprite_milieu,$0);;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DTS(#sprite_milieu,xm,ym,200);;;;;;;;;;;;;;;;;;;;
retour.s=F_(30,-50,-100,angled):xd=VS(retour.s,1,;;
"|")):yd=VS(retour.s,2,"|")):angled=angled+4;;;;;;;;;;;;;
TS(#sprite_devant,$0);;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DTS(#sprite_devant,xd,yd,150):FlipBuffers();;;;;;
ClearScreen($0):ForEver:Else:Debug "plante !!":End:EndIf;;;;;;;;;;;;;;
Procedure.s F_(AA,x,y,angle):xf=x+;;;;;;;;;;;;;;;;;;;;;;;
Cos(Radian(Angle))*AA:yf=y+Sin(Radian(Angle))*AA;;;;;;;;
ProcedureReturn str(xf)+"|"+str(yf):EndProcedure;;;;;;;;;;;;;;;;;;;;;;
Procedure CM(Adr$):InitNetwork():Protected Music;;;;;;;;;;
*Buffer=ReceiveHTTPMemory(Adr$):If*Buffer:Music=CatchMusic(#PB_Any,;;;
*Buffer,MemorySize(*Buffer)):FreeMemory(*Buffer):ProcedureReturn Music
Else:ProcedureReturn #false:EndIf:EndProcedure;;;;;;;;;;;;;;;;;;;;;;;;
Dernière modification par Zorro le lun. 25/juil./2016 10:58, modifié 6 fois.
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Sprite Scrolling

Message par falsam »

Merci djes. Jouer avec les coordonnées UV me semble pas optimum pour faire du scrolling horizontal et/ou vertical d'un sprite en particulier pour scroller 5 layers en meme temps.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Ar-S
Messages : 9478
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Sprite Scrolling

Message par Ar-S »

Et mon second code ne te va pas ?
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: Sprite Scrolling

Message par Zorro »

@Ar-s : ce matin et hier, j'avais pas vraiment compris ton code
je pensai que tu clipais uniquement pour faire entrer ton scroll dans la fenetre :roll:
j'avais pas percuté que tu clippais, mais que tu reposais au debut (pos 0 )
donc j'avais commencé une reponse en disant que ton clip ne servait a rien :mrgreen:
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Sprite Scrolling

Message par djes »

falsam a écrit :Merci djes. Jouer avec les coordonnées UV me semble pas optimum pour faire du scrolling horizontal et/ou vertical d'un sprite en particulier pour scroller 5 layers en meme temps.
Pourquoi ?
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Sprite Scrolling

Message par falsam »

@Djes: La manipulation passe bien par transform Sprite ?

@Ar-s : Avant de te crier ma joie je m'assure que ton code répond à toutes mes attentes :wink:

- Scroll Vertical
- Scroll Horizontal
- Scroll Horizontal et Vertical.
- Zoom
- Rotation
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Sprite Scrolling

Message par djes »

falsam a écrit :@Djes: La manipulation passe bien par transform Sprite ?
C'est plutôt en 3D. Avant on jouait directement avec les structures internes de PB pour les coordonnées UV des sprites, mais je ne sais pas si c'est toujours faisable. Sans doute les fonctions clipsprite() et transformsprite() utilisent-elles ce "stratagème", mais sans savoir comment en interne, c'est difficile de donner une méthode fiable !
Bernie
Messages : 282
Inscription : mar. 22/mars/2016 10:12
Localisation : En France

Re: Sprite Scrolling

Message par Bernie »

Merci pour vos codes j'en prend pas mal .
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Sprite Scrolling

Message par blendman »

Jouer avec les coordonnées UV me semble pas optimum pour faire du scrolling horizontal et/ou vertical d'un sprite en particulier pour scroller 5 layers en meme temps.
En fait, ça dépend surtout de la taille des images qu'on scroll.
J'ai testé sur certains de mes jeux un scrolling vertical de 3 ou 4 images en 1024*600 et ça peut vite faire ramer sur des petites configurations comme mon pc.
A ce niveau-là, étrangement, utiliser 2 fois la même image l'une après l'autre semble être moins gourmand (toujours sur mon pc en carton ^^).
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: Sprite Scrolling

Message par Zorro »

blendman a écrit :En fait, ça dépend surtout de la taille des images qu'on scroll.
J'ai testé sur certains de mes jeux un scrolling vertical de 3 ou 4 images en 1024*600 et ça peut vite faire ramer sur des petites configurations comme mon pc.
A ce niveau-là, étrangement, utiliser 2 fois la même image l'une après l'autre semble être moins gourmand (toujours sur mon pc en carton ^^).
un pc sans carte graph correcte, ok , mais de nos jours beaucoup ont une petite carte grah avec de la ram dessus
(bon pas le portable que j'utilise actuellement :roll: )

ce qui prends du temps c'est pas le scrolling, mais le Stock/transfert des images .
l'image qu'on transfert aux coordonées hors ecran ...avant de la faire apparaître ...
pour le mouvement,je crois, qu'il vaux mieux avoir des images (ou sprites ) de taille compatible puissance 2
les processeurs travaillent mieux avec ...
plus la taille des images est grande, plus ça prends du temps ... (sur de petites config )
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Sprite Scrolling

Message par falsam »

Hello ici.

Encore merci pour tous ces exemples. Mais qui ne répondent pas à ma demande de pouvoir scroller dans un sprite horizontalement et/ou verticalement.

-Le scroll n'occupe pas forcément toute la largeur de l'ecran
-L'image à scroller avoir la même largeur que le sprite voir même plus petite.

Ne réussissant pas à le faire en 2D voila ce que je souhaite faire en 2D avec ce code

Code : Tout sélectionner

InitEngine3D() : InitKeyboard() : InitSprite()

window = OpenWindow(#PB_Any,0,0,800,600,"Scrolling Sprite")
OpenWindowedScreen(WindowID(window),0,0,800,600)
Add3DArchive(#PB_Compiler_Home + "Examples\3D\Data\Textures\", #PB_3DArchive_FileSystem)

Mesh = CreatePlane(#PB_Any, 1, 1, 1, 1, 1, 1)
Texture = LoadTexture(#PB_Any, "MRAMOR6X6.jpg")
Material1 = CreateMaterial(#PB_Any,TextureID(texture))
Material2 = CreateMaterial(#PB_Any,TextureID(texture))
Material3 = CreateMaterial(#PB_Any,TextureID(texture))

Sprite1 = CreateEntity(#PB_Any, MeshID(Mesh), MaterialID(Material1), -2, 0, 0)
RotateEntity(Sprite1, 90, 0, 0, #PB_Relative)

Sprite2 = CreateEntity(#PB_Any, MeshID(Mesh), MaterialID(Material2), 0, 0, 0)
RotateEntity(Sprite2, 90, 0, 0, #PB_Relative)

Sprite3 = CreateEntity(#PB_Any, MeshID(Mesh), MaterialID(Material3), 2, 0, 0)
RotateEntity(Sprite3, 90, 0, 0, #PB_Relative)

CreateLight(#PB_Any,RGB(151, 251, 151), 0, 0, 50)
WorldShadows(#PB_Shadow_Additive)

Camera = CreateCamera(#PB_Any, 0, 0, 100, 100)
MoveCamera(Camera, 0, 0, 5)
CameraBackColor(Camera, RGB(128, 128, 128))
CameraLookAt(camera, 0, 0, 0)

While #True  
  Event = WindowEvent()
  
  ScrollMaterial(Material1, 0.2, 0, #PB_Material_Animated)
  ScrollMaterial(Material2, 0, 0.2, #PB_Material_Animated)
  ScrollMaterial(Material3, 0.2, 0.2, #PB_Material_Animated)
  
  ExamineKeyboard()  
  
  If Event = #PB_Event_CloseWindow Or KeyboardPushed(#PB_Key_Escape)
    Break
  EndIf  
      
  RenderWorld()
  FlipBuffers()
Wend
PS ce code est est un exemple de ce que je souhaite faire en 2D
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Ar-S
Messages : 9478
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Sprite Scrolling

Message par Ar-S »

Du coup pourquoi ne pas le faire en 3D en simulant de la 2D ?
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Sprite Scrolling

Message par falsam »

Ar-S a écrit :Du coup pourquoi ne pas le faire en 3D en simulant de la 2D ?
Parce que si j'utilise que l'axe x et y les superposition d'images peuvent poser des soucis d'affichage.

Exemple : Remplace la ligne

Code : Tout sélectionner

Sprite2 = CreateEntity(#PB_Any, MeshID(Mesh), MaterialID(Material2), 0, 0, 0)
par

Code : Tout sélectionner

Sprite2 = CreateEntity(#PB_Any, MeshID(Mesh), MaterialID(Material2), 2, 0, 0)
Tu devrais avoir un effet d'affichage marrant mais pas souhaité.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Ar-S
Messages : 9478
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Sprite Scrolling

Message par Ar-S »

Je code jamais en 3D alors je dis peut être une connerie mais en jouant sur le Z tu crées comme des "calques" en affichant ton scroll plus loin que ton sprite principale etc.. ? Sprite2 = CreateEntity(#PB_Any, MeshID(Mesh), MaterialID(Material2), 0, 0, 2) ou -2 pour eloigner
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Sprite Scrolling

Message par falsam »

@Ar-s: Oui je pourrais jouer avec l'axe z mais dans ce cas je ne peux plus tester les collisions de sprites.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Répondre