Problème d'affichage de Sprite

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Zanshi
Messages : 6
Inscription : jeu. 20/mars/2014 19:39

Problème d'affichage de Sprite

Message par Zanshi »

Tout d'abord, voila mon code de maintenant

Code : Tout sélectionner

InitSprite()
InitKeyboard()
UsePNGImageDecoder()
Structure var
  x.l
  PasX.l
  y.l
  PasY.l
EndStructure

Global Gus.var
Gus\x      = 0
Gus\y      = 0
Gus\PasX   = 0
Gus\PasY   = 0
Global in.l,out.l,x.l,xstep.l,y.l,ystep.l,dep.s

Enumeration
  #door
  #hero
  #land_1
  #land_2
  #step
  #wall
  #window
EndEnumeration
d:
OpenWindow(#window,0,0,960,680,"",#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_BorderLess|#PB_Window_MaximizeGadget|#PB_Window_MinimizeGadget)
OpenWindowedScreen(WindowID(#window),0,0,960,680,1,0,0)
ClearScreen(RGB(0,0,0))
LoadSprite(#door,"Image\door.png")
LoadSprite(#hero,"Image\hero.png")
LoadSprite(#land_1,"Image\land_1.png")
LoadSprite(#land_2,"Image\land_2.png")
LoadSprite(#step,"Image\step.png")
LoadSprite(#wall,"Image\wall.png")
TransparentSpriteColor(#hero,RGB(255,255,255))

For x=0 To 960 Step 40
  For y=0 To 680 Step 40
    DisplaySprite(#wall,x,y)
  Next
Next
in=Random(22-1)+1
out=Random(15-1)+1
DisplaySprite(#door,in*40,0)
DisplaySprite(#door,out*40,640)
xstep=Random(22-1)+1
ystep=Random(15-1)+1
DisplaySprite(#step,xstep*40,ystep*40)
For x=40 To 880 Step 40
  For y=40 To 600 Step 40
    ran=Random(100)
    Select ran
      Case 0 To 75
        If (y/40)%2=0
          DisplaySprite(#land_1,x,y)
        ElseIf (y/40)%2=1
          DisplaySprite(#land_2,x,y)
        EndIf
      Case 76 To 100
        DisplaySprite(#wall,x,y)
    EndSelect
    passage:
  Next
Next
DisplaySprite(#land_2,in*40,40)

Gus\x=in*40
Gus\y=40

Repeat
  ExamineKeyboard()
  If KeyboardPushed(#PB_Key_W)
    Gus\PasY = - 40
  EndIf
  If KeyboardPushed(#PB_Key_D)
    Gus\PasX = 40
  EndIf
  If KeyboardPushed(#PB_Key_S)
    Gus\PasY = 40
  EndIf
  If KeyboardPushed(#PB_Key_A)
    Gus\PasX = - 40
  EndIf
  
  Gus\x + Gus\PasX
  Gus\y + Gus\PasY
  Gus\PasX = 0
  Gus\PasY = 0
  
  DisplayTransparentSprite(#hero,Gus\x,Gus\y)
  FlipBuffers()
  
  If KeyboardPushed(#PB_Key_RightShift)
    Goto d
  EndIf
  If KeyboardPushed(#PB_Key_Escape) Or WaitWindowEvent()=#PB_Event_CloseWindow
    End
  EndIf
  Delay(20)
ForEver
Et voici les image nécessaire: https://mega.co.nz/#!UodlmBYa!HntrfwRCQ ... wEBbQuxW0c
Mon problème, c'est que je n'arrive pas à déplacé le joueur sans les "trainés"...
Quelqu'un pourrait m'aider s'il vous plait ?
Sauver les bambous, manger du panda ! *heu...*
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Problème d'affichage de Sprite

Message par G-Rom »

clearscreen
Avatar de l’utilisateur
majikeyric
Messages : 602
Inscription : dim. 08/déc./2013 23:19
Contact :

Re: Problème d'affichage de Sprite

Message par majikeyric »

Salut, juste en regardant ton code, il manque un clearscreen(0) avant DisplayTransparentSprite(#hero,Gus\x,Gus\y) je pense...
Avatar de l’utilisateur
Zanshi
Messages : 6
Inscription : jeu. 20/mars/2014 19:39

Re: Problème d'affichage de Sprite

Message par Zanshi »

Justement quand je le fait, cela me laisse que la couleur demandé et non le sol et les murs...
Sauver les bambous, manger du panda ! *heu...*
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Re: Problème d'affichage de Sprite

Message par comtois »

il faut mettre la construction de ta map dans une procédure, et tu appelles cette procédure dans la boucle juste avant DisplayTransparentSprite(#hero,Gus\x,Gus\y).

Code : Tout sélectionner

DrawMap()
DisplayTransparentSprite(#hero,Gus\x,Gus\y)
Il faut donc stocker les informations de ta map dans un tableau, et la procédure DrawMap() permet d'afficher ce tableau.
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Avatar de l’utilisateur
majikeyric
Messages : 602
Inscription : dim. 08/déc./2013 23:19
Contact :

Re: Problème d'affichage de Sprite

Message par majikeyric »

Il faut ré-afficher tous les éléments graphiques à chaque boucle( sol, murs, perso..) après avoir effacer l'écran.

mémorise ton écran dans un tableau et après tu le ré-affiche à chaque fois.

Dans ton code tu ne gère que l'affichage du perso.

*edit*: comtois a été plus rapide...
Avatar de l’utilisateur
Zanshi
Messages : 6
Inscription : jeu. 20/mars/2014 19:39

Re: Problème d'affichage de Sprite

Message par Zanshi »

Effectivement je n'y avais pas pensé, j'ai le droit de me sentir con ?

Merci comtois, et majikeyric
Sauver les bambous, manger du panda ! *heu...*
Avatar de l’utilisateur
majikeyric
Messages : 602
Inscription : dim. 08/déc./2013 23:19
Contact :

Re: Problème d'affichage de Sprite

Message par majikeyric »

On est tous des cons en puissance :mrgreen:
Avatar de l’utilisateur
Zanshi
Messages : 6
Inscription : jeu. 20/mars/2014 19:39

Re: Problème d'affichage de Sprite

Message par Zanshi »

J'ai fait le tableau, et du coup j'en ai profité pour faire les collisions, ça fonctionne.
Sauver les bambous, manger du panda ! *heu...*
Avatar de l’utilisateur
majikeyric
Messages : 602
Inscription : dim. 08/déc./2013 23:19
Contact :

Re: Problème d'affichage de Sprite

Message par majikeyric »

Cool! :mrgreen:
Répondre