Bonjour à tous ,
Pour ceux que cela intéresse , voici un code source qui permet de faire défiler une image de fond d'écran de droite à gauche et vice versa avec DIRECTX et VB6
Milles excuses si la manière pour envoyer ce code n'est pas correcte mais une explication de votre part serait la bienvenue pour cette manip.
Cordialement
Yvanovitch

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
 
dans le code du module
xxxxxxxxxxxxxxxxxxx on utilise 3 touches du clavier xxxxxxxxxxxxxxxxxx
'xxxxxxxxxxxxxx TOUCHE B...... on sort du programme ..........xxxxxxxxxx
'xxxxxxxxxxxxxx TOUCHE A....... marche avant du décor........xxxxxxxxxx
'xxxxxxxxxxxxxx TOUCHE C....... marche arrière du décor......xxxxxxxxxx
'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 
 
 
Option Explicit
 
Public DX As New DirectX7
Public DD As DirectDraw7
Public Primary As DirectDrawSurface7    'Surface primaire visible a l'écran
Public Backbuffer As DirectDrawSurface7 'Surface brouillon invisible
Public ximage1 As Long ' coordonnées d'affichage du fond
Public touche  As Integer ' touche du clavier
Public flag As Integer ' sert à l'affichage des portions d'images ( quand on affiche le début et la fin d'une image sur le mème écran )
Public vitesse As Integer ' vitesse de déplacement du décor
Public largeur_image As Long ' largeur de l'image de fond
Public hauteur_image As Long ' hauteur de l'image de fond
Public largeur_ecran As Long
'xxxxxxxxxxx...........si on prend une autre image de fond , il faut simplement changer les valeurs.......xxxxxx
'xxxxxxxxxxx...........ci-dessous pour que les calculs s'adaptent aux nouvelles dimensions..................xxxxxx
Sub Main() 'initialisation des variables et boucle de jeu
'xxxxxxxxxxxx ATTENTION , pour une raison inconnu , la largeur de l'image ne doit pas dépasser 4000 pixels , sinon image inexploitable xxxxxxxxxxxx
largeur_image = 4000 ' modifier ces valeurs pour adapter à une nlle image(attention pour ne pas avoir de noir entre les images , la largeur de l'image doit etre au minimum égale à la largeur de l'écran
hauteur_image = 805 ' mettre ici un maximum = a la  hauteur_ecran mème si l'image est plus haute sinon pas d'affichage
vitesse = 3 ' vitesse de défilement
largeur_ecran = 1280 ' fonction de la résolution de l'écran
Form1.Show ' il le faut impératif?
ximage1 = 0
flag = 0
Set DD = DX.DirectDrawCreate("")
DD.SetCooperativeLevel Form1.hWnd, DDSCL_FULLSCREEN Or DDSCL_EXCLUSIVE Or DDSCL_ALLOWREBOOT ' plein écran
DD.SetDisplayMode 1280, 1024, 32, 0, DDSDM_DEFAULT ' pour une compabilité avec tous les écrans , mettre 640,480,16 mais alors modifier la variable largeur_ecran
Dim ddsd As DDSURFACEDESC2
ddsd.lFlags = DDSD_BACKBUFFERCOUNT Or DDSD_CAPS
ddsd.lBackBufferCount = 1
ddsd.ddscaps.lCaps = DDSCAPS_COMPLEX Or DDSCAPS_FLIP Or DDSCAPS_PRIMARYSURFACE Or DDSCAPS_VIDEOMEMORY
Set Primary = DD.CreateSurface(ddsd)
Dim ddscaps As DDSCAPS2
ddscaps.lCaps = DDSCAPS_BACKBUFFER Or DDSCAPS_VIDEOMEMORY
Set Backbuffer = Primary.GetAttachedSurface(ddscaps)
 'création des images
 Dim noufond As DirectDrawSurface7 ' le fond
 Dim noufondddsd As DDSURFACEDESC2
 Set noufond = DD.CreateSurfaceFromFile("c:\scroll_décor\sans.bmp", noufondddsd) ' mettre ici le chemin de l'image a charger
Do
If touche = 66 Then ' si on appui sur B on quitte
GoTo fin
End If
Backbuffer.BltColorFill ddRect(0, 0, 0, 0), RGB(0, 0, 0) 'couleur fixe pour le fond noir de la fenetre(Bleu ,vert,rouge)
Backbuffer.SetForeColor RGB(255, 255, 0) ' couleur pour les explications ici c'est l'inverse rouge,vert,bleu
If touche = 65 Then decale_gauche ' on appui sur A on défile vers la gauche
If touche = 67 Then decale_droite ' on appui sur C on défile vers la droite
'xxxxxxxxxxxxxxxxxxxxxxx image se décale à gauche xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
If ximage1 < 0 Then GoTo droite ' si l'image saute à la transition à modifier
If ximage1 >= largeur_image - largeur_ecran Then GoTo suite ' si l'image saute à la transition à modifier
Backbuffer.BltFast 0, 0, noufond, ddRect(ximage1, 0, largeur_ecran + ximage1, hauteur_image), DDBLTFAST_NOCOLORKEY 'affichage du noufonden entier
flag = 0
GoTo suite2
suite:
If touche = 65 Then flag = flag + vitesse Else flag = flag - vitesse
Backbuffer.BltFast 0, 0, noufond, ddRect(ximage1, 0, largeur_image, hauteur_image), DDBLTFAST_NOCOLORKEY  'affichage du grand morceau
Backbuffer.BltFast largeur_ecran - flag, 0, noufond, ddRect(0, 0, 0 + flag, hauteur_image), DDBLTFAST_NOCOLORKEY 'affichage du petit morceau
If ximage1 >= largeur_image - 5 Then ximage1 = 0 ' si l'image saute à la transition à modifier
GoTo suite2
'xxxxxxxxxxxxxxxxxxxxxxxxx fin décalage à gauche xxxxxxxxxxxxxxxx
droite:
'xxxxxxxxxxxxxxxxxxxxxxxxx image de décale à droite xxxxxxxxxxxxxx
Backbuffer.BltFast 0, 0, noufond, ddRect(largeur_image - Abs(ximage1), 0, largeur_image, hauteur_image), DDBLTFAST_NOCOLORKEY 'affichage du noufonden entier
Backbuffer.BltFast Abs(ximage1), 0, noufond, ddRect(0, 0, largeur_ecran - Abs(ximage1), hauteur_image), DDBLTFAST_NOCOLORKEY 'affichage du noufonden entier
If ximage1 < -largeur_ecran + 5 Then ximage1 = largeur_image - largeur_ecran ' si l'image saute à la transition à modifier
suite2:
DoEvents
Primary.Flip Nothing, DDFLIP_WAIT
Loop
fin:
'ShowCursor True ' réaffiche le curseur de la souris
Unloade
Unload Form1
End Sub
Sub Unloade() ' on décharge propement directx
 Set DD = Nothing
 Set Primary = Nothing
 Set Backbuffer = Nothing
 Set DX = Nothing
End Sub
Public Function ddRect(x1 As Long, y1 As Long, x2 As Long, y2 As Long) As RECT
ddRect.Left = x1
ddRect.Right = x2
ddRect.Top = y1
ddRect.Bottom = y2
End Function
Private Sub decale_droite()
ximage1 = ximage1 - vitesse
End Sub
 
Private Sub decale_gauche()
ximage1 = ximage1 + vitesse
End Sub
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
dans le code de la form
Option Explicit
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
touche = KeyCode ' sert a gérer les touches A et B pour entrer et sortir du jeu
End Sub