Page 1 sur 1

[resolu] Sprite et masque...

Publié : dim. 14/sept./2008 14:13
par Ar-S
Voilà le jour est enfin arrivé !
Je commence à m'initier aux sprites et autre StartDrawing..

1ere tentative et 1er soucis.

Je suis en train de faire un calendrier lunaire, j'ai fait l'image d'une pleine lune (avec Vue 4) et je souhaiterai par dessus ajouter un cercle noir qui se déplacerait de gauche à droite de façon à montrer les différentes phases lunaires.

Voilà l'image.
Image

J'ai donc chargé mon image en tant que sprite et ai créé un cercle noir qui servira de masque.
Le probleme est que mon cercle ne se voit pas...

Voilà le code.

Code : Tout sélectionner


If InitNetwork()=0 Or InitSprite()=0
  MessageRequester ("Erreur","erreur") : End
EndIf

Global path$=GetCurrentDirectory()
Global ChemImage$=path$+"luna1ab4.png"

UsePNGImageDecoder()

  If OpenWindow(0, 400, 400, 200, 300, "test", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_TitleBar)
    If OpenWindowedScreen(WindowID(0), 25, 50, 150, 150, 0, 0, 0)
      LoadSprite(lune, ChemImage$,0) ; Je charge mon image en tant que sprite "lune"
      DisplaySprite(lune,0,0) ; Je l'affiche
      CreateSprite(AlphaLune,150,150) ; je créé un sprite 'AlphaLune' vide de 150 x 150
      If StartDrawing(SpriteOutput(lune))
          Circle(0, 0, 75 ,RGB(250,250,250))
          StopDrawing()
        EndIf 
      EndIf
      
      Repeat
        Select WaitWindowEvent()
          Case #PB_Event_CloseWindow
            Select EventWindow()
              Case 0
                CloseWindow(0)
                Break
            EndSelect
        EndSelect
      ForEver
  EndIf 

Publié : dim. 14/sept./2008 15:01
par Oliv
Tu affiches ton sprite avant de dessiner dessus, donc on ne peux pas voir le changement. Il faut aussi utiliser "Flipbuffers()" pour mettre les changements à jours.

Fait aussi attention tu dessines sur le sprite "lune" et non "alphalune"

Code : Tout sélectionner

If InitNetwork()=0 Or InitSprite()=0 
  MessageRequester ("Erreur","erreur") : End 
EndIf 

Global path$=GetCurrentDirectory() 
Global ChemImage$=path$+"luna1ab4.png" 

UsePNGImageDecoder() 

  If OpenWindow(0, 400, 400, 200, 300, "test", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_TitleBar) 
    If OpenWindowedScreen(WindowID(0), 25, 50, 150, 150, 0, 0, 0) 
      LoadSprite(lune, ChemImage$,0) ; Je charge mon image en tant que sprite "lune" 
      DisplaySprite(lune,0,0) ; Je l'affiche 
      CreateSprite(AlphaLune,150,150) ; je créé un sprite 'AlphaLune' vide de 150 x 150 
      If StartDrawing(SpriteOutput(lune)) 
          Circle(0, 0, 75 ,RGB(250,250,250)) 
          StopDrawing() 
        EndIf 
      EndIf
       
      DisplaySprite(lune,0,0) 
      FlipBuffers()
      
      Repeat 
        Select WaitWindowEvent() 
          Case #PB_Event_CloseWindow 
            Select EventWindow() 
              Case 0 
                CloseWindow(0) 
                Break 
            EndSelect 
        EndSelect 
      ForEver 
  EndIf

Publié : dim. 14/sept./2008 15:47
par Ar-S
merci oliv, mais avec ce code, pourquoi mon sprite lune ne saffiche pas ?

Code : Tout sélectionner

If OpenWindow(0, 400, 400, 200, 300, "test", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_TitleBar)
  If OpenWindowedScreen(WindowID(0), 25, 50, 150, 150, 0, 0, 0)
    LoadSprite(lune, ChemImage$,0) ; Je charge mon image en tant que sprite "lune"
    DisplaySprite(lune,0,0) ; Je l'affiche
    CreateSprite(AlphaLune,150,150) ; je créé un sprite 'AlphaLune' vide de 150 x 150
    If StartDrawing(SpriteOutput(lune))
        Circle(20, 75, 75 ,RGB(250,250,250))
      StopDrawing()
    EndIf
  EndIf
  
  DisplaySprite(lune,0,0)
  FlipBuffers()
normalement avec Circle(20, 75, 75 ,RGB(250,250,250))
Mon cercle est affiché un peu décalé à gauche, ce qui devrait faire apparaitre un peu de la 'lune' ?

Publié : dim. 14/sept./2008 16:24
par Anonyme

Code : Tout sélectionner

If InitNetwork()=0 Or InitSprite()=0
  MessageRequester ("Erreur","erreur") : End
EndIf

Global path$=GetCurrentDirectory()
Global ChemImage$=path$+"luna1ab4.png"
TransparentSpriteColor(-1,0)
UsePNGImageDecoder()

  If OpenWindow(0, 400, 400, 200, 300, "test", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_TitleBar)
    If OpenWindowedScreen(WindowID(0), 25, 50, 150, 150, 0, 0, 0)
      LoadSprite(lune, ChemImage$,0) ; Je charge mon image en tant que sprite "lune"
      DisplayTransparentSprite(lune,0,0) ; Je l'affiche
      CreateSprite(AlphaLune,150,150) ; je créé un sprite 'AlphaLune' vide de 150 x 150
      If StartDrawing(SpriteOutput(AlphaLune))
          Circle(75/2, 75, 75 ,RGB(1,1,1))
          StopDrawing()
        EndIf
      EndIf
       
      DisplayTransparentSprite(lune,0,0)
      FlipBuffers()
     
      Repeat
        Select WaitWindowEvent()
          Case #PB_Event_CloseWindow
            Select EventWindow()
              Case 0
                CloseWindow(0)
                Break
            EndSelect
        EndSelect
      ForEver
  EndIf

Publié : dim. 14/sept./2008 16:28
par Ar-S
Hum j'étais passé à coté de DisplayTransparentSprite
Merci les copains. :P