0/5 (9 avis)
Vue 5 682 fois - Téléchargée 643 fois
'Dans se deuxième tutorial je par sur la base que vous savez afficher une image par Direct Input, du moins que vous avez au moins parcouru mon premier tuto sur Input 'On utilise une api pour cacher le curseur : Private Declare Function ShowCursor Lib "user32" (ByVal bShow As Long) As Long 'Donc tous d'abord on fait la déclaration normale de Input : Public dx As New DirectX7 Public dd As DirectDraw7 Public Primary As DirectDrawSurface7 Public Backbuffer As DirectDrawSurface7 Public bRunning As Boolean 'Maintenant les objets direct input : 'Objet servant à la gestion des entrées de l'ordinateur Public DI As DirectInput 'Un device pour récupérer les données du clavier Public DIdevice As DirectInputDevice 'Un tableau dans lequel sont stockées l'état de toutes les touches. Public DIstate As DIKEYBOARDSTATE 'Et les variables qui nous servirons ' Variable pour la flèche de droite et celle de gauche Public scroldroite, scrolgauche 'Variable gérant la position de notre image Public posx, posy, reelx, reely '***** Nous rentrons dans la sub principale ***** Sub Main() On Error GoTo ErrorTrap 'Nous donnons des valeurs à nos variables posx = 5: posy = 5: reely = 200: reelx = 0 'Nous cachons la sourie ShowCursor False bRunning = True '*******Déclaration des objets pour le clavier, obligatoire pour DirectInput Set DI = dx.DirectInputCreate() Set DIdevice = DI.CreateDevice("GUID_SysKeyboard") DIdevice.SetCommonDataFormat DIFORMAT_KEYBOARD DIdevice.SetCooperativeLevel Form1.hWnd, DISCL_BACKGROUND Or DISCL_NONEXCLUSIVE 'Nous disons qu'on relève toute les touches tapé, à ne pas oublier sinon marche pas DIdevice.Acquire '***Déclarations des objets pour l'écran, comme normal Set dd = dx.DirectDrawCreate("") dd.SetCooperativeLevel Form1.hWnd, DDSCL_FULLSCREEN Or DDSCL_EXCLUSIVE Or DDSCL_ALLOWREBOOT dd.SetDisplayMode 640, 480, 16, 0, DDSDM_DEFAULT '*******création d'une surface principale******** Dim ddsd As DDSURFACEDESC2 ddsd.lFlags = DDSD_CAPS Or DDSD_BACKBUFFERCOUNT ddsd.ddscaps.lCaps = DDSCAPS_PRIMARYSURFACE Or DDSCAPS_FLIP Or DDSCAPS_COMPLEX Or DDSCAPS_VIDEOMEMORY ddsd.lBackBufferCount = 1 Set Primary = dd.CreateSurface(ddsd) '**** création de la surface auxiliaire **** Dim ddscaps As DDSCAPS2 ddscaps.lCaps = DDSCAPS_BACKBUFFER Or DDSCAPS_VIDEOMEMORY Set Backbuffer = Primary.GetAttachedSurface(ddscaps) '******* création d'une nouvelle surface pour afficher une image ******* Dim Surface As DirectDrawSurface7 Dim ddsd2 As DDSURFACEDESC2 Set Surface = dd.CreateSurfaceFromFile(app.path & "\van.bmp", ddsd2) 'ici une voiture 'Creation d'une couleur transparente Dim ck As DDCOLORKEY ck.high = RGB(255, 255, 255) ck.low = RGB(255, 255, 255) Surface.SetColorKey DDCKEY_SRCBLT, ck 'on affecte la couleur à notre image 'On crée une surface servant de support (route) Dim route As DirectDrawSurface7 Dim ddsdroute As DDSURFACEDESC2 Set route = dd.CreateSurfaceFromFile(app.path & "\route.bmp", ddsdroute) Form1.Show ' on affiche la form1 Primary.Flip Nothing, DDFLIP_WAIT ' on met la surface primaire à l'écran On Error Resume Next Do Backbuffer.BltColorFill ddRect(0, 0, 0, 0), QBColor(14) ' on remplis le buffer de blanc Backbuffer.BltFast 0, 285, route, ddRect(0, 0, 0, 0), DDBLTFAST_WAIT 'on place la route Backbuffer.BltFast 320, 285, route, ddRect(0, 0, 0, 0), DDBLTFAST_WAIT 'toujours la 'route 'Grâce au variable des positions réel de x et y on peut paramétrer pour faire une route infinie 'La positions de x et y est replacer soit à 0 si la voiture sort a droite soit a 600 si elle sort a 'gauche If reelx > 600 Then reelx = 0 ' à droite If reelx < 0 Then reelx = 600 ' à gauche '******* ici nous nous servons du clavier pour déplacer la voiture ******* '***** MISE A JOUR ICI *********** ' ** * * * Pour la flèche de droite. If scroldroite = 1 Then 'Notre position réel de l'objet est incrémenté de la variable posx reelx = reelx + posx ' On dis que la flèche de droite n'est plus activé pour pas que la boucle soit infinie scroldroite = 0 End If ' ** * * Pour la flèche de gauche If scrolgauche = 1 Then 'Notre position réel de l'objet est décrémenté de la variable posx reelx = reelx - posx ' On dis que la flèche de droite n'est plus activé pour pas que la boucle soit infinie scrolgauche = 0 End If Backbuffer.BltFast reelx, reely, Surface, ddRect(0, 0, 0, 0), DDBLTFAST_WAIT Or DDBLTFAST_SRCCOLORKEY ' on affiche dans le backbuffer notre image avec pour coordonnée reelx, reely '******* FIN DE MISE A JOUR ********* Primary.Flip Nothing, DDFLIP_WAIT 'Si la surface est perdu on la restore If Err.Number = DDERR_SURFACELOST Then Primary.restore End If clavier ' on appelle la fonction clavier, c'est elle qui va géré nos variable scrolgauche et 'scroldroite DoEvents Loop Until bRunning = False Exit Sub ErrorTrap: End End Sub '**** déclaration de la fonction rect **** 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 Public Sub UnloadDD() '**** Fermeture propre du programme **** bRunning = False dd.RestoreDisplayMode Set Primary = Nothing Set Backbuffer = Nothing Set dd = Nothing Set dx = Nothing Set DI = Nothing Set DIdevice = Nothing ShowCursor True '***** MISE A JOUR ******** DIdevice.Unacquire ' On libére l'acquisition du clavier '***** FIN DE MISE A JOUR ****** End End Sub '**** Routine du clavier Sub clavier() 'Ici on déclare une variable i qui sera la pour tester la valeur des touches Dim i 'On acquière les touches dans la variable DIstate DIdevice.GetDeviceStateKeyboard DIstate '******** MISE A JOUR ICI ******** If DIstate.Key(DIK_RIGHT) Then scroldroite = 1 'si c'est la touche de droite notre 'valeur scroldroite vos 1 If DIstate.Key(DIK_LEFT) Then scrolgauche = 1 ' si c'est la touche de gauche notre 'valeur scrolgauche vos 1 End Sub ' C'est grâce à cette routine que l'on peut faire le test pour voir si nos touche sont 'enclenchées. '******** FIN DE MISE A JOUR ***********
28 juin 2004 à 13:35
Regarde à nouveau le tuto et tu verras :
' **** Mise à jour ****
.........
*******************
Voila.
28 juin 2004 à 12:22
27 juin 2004 à 11:50
Je suis sur la préparation d'un tuto pour faire un menu quand on appuis sur echap car je me suis retrouver dans le probléme de changer de boucle sans faire planter DX, donc je vais vous montrer comment faire.
allé bon code
+
23 juin 2004 à 22:00
23 juin 2004 à 21:50
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.