Page 1 sur 1

Problème avec sprite

Publié : lun. 24/mai/2004 16:07
par Good07
Bonjour à tous !

Je sais, j'ai que des problèmes, mais je teste PureBasic sous toutes les coutures et dès fois (hum... que dès fois ?) je ne comprend pas tout.
Ainsi je ne comprend pas pourquoi j'ai le message suivant : "Sprite non initialisé " en utilisant la constante #PB_Sprite_Alpha alors que je ne l'ai pas si j'utilise #PB_Sprite_Memory. Je vous donne le bout de code qui ne fonctionne pas, le reste ne sert qu'a l'affichage.

Code : Tout sélectionner


 CreateSprite(1,80,30,#PB_Sprite_Memory)
 text$="New Game"
 hb=30
 lb=80
 StartDrawing(SpriteOutput(1))  
 Box(0,0,lb,hb,RGB(211,201,189))
 LineXY(0,hb,0,0,RGB(255,255,255))
 LineXY(0,0,lb,0,RGB(255,255,255))
 LineXY(lb-1,0,lb-1,hb,RGB(0,0,0))
 LineXY(lb,hb-1,0,hb-1,RGB(0,0,0))
 DrawingMode(1)
 xt=(lb-TextLength(text$))/2
 yt=hb-25
 Locate(xt,yt)
 DrawText(text$)
 StopDrawing()

J'a pas du tout comprendre :oops:

Merci de votre compréhension :D

André

Publié : lun. 24/mai/2004 17:00
par Guimauve
Tiens essai avec ce code :

Code : Tout sélectionner

If InitSprite() = 0 Or InitKeyboard() = 0
  MessageRequester("Erreur", "Impossible d'initialiser DirectX 7 Ou plus", 0)
  End
EndIf
If  OpenScreen(1024,768,32,"Un test avec un sprite !") = 0
  MessageRequester("Erreur", "Impossible d'ouvrir l'écran ", 0)
  End
EndIf

   CreateSprite(1,80,30);,#PB_Sprite_Memory) 

  text$="New Game" 
 hb=30 
 lb=80 
 StartDrawing(SpriteOutput(1))  
 Box(0,0,lb,hb,RGB(211,201,189)) 
 LineXY(0,hb,0,0,RGB(255,255,255)) 
 LineXY(0,0,lb,0,RGB(255,255,255)) 
 LineXY(lb-1,0,lb-1,hb,RGB(0,0,0)) 
 LineXY(lb,hb-1,0,hb-1,RGB(0,0,0)) 
 DrawingMode(1) 
 xt=(lb-TextLength(text$))/2 
 yt=hb-25 
 Locate(xt,yt) 
 DrawText(text$) 
 StopDrawing() 
 
 Repeat
   FlipBuffers()
  ClearScreen(0, 0, 10)
DisplaySprite(1, 150, 500) 
  ExamineKeyboard()


Until KeyboardPushed(#PB_Key_Escape)
End
Et donne des nouvelles.

A+
Guimauve

Publié : lun. 24/mai/2004 17:31
par Good07
Oui je sais comme celà il n'y a pas de problèmes...
je te donne le code qui ne fonctionne pas :mad:

Code : Tout sélectionner

If InitSprite() = 0 Or InitKeyboard() = 0 
  MessageRequester("Erreur", "Impossible d'initialiser DirectX 7 Ou plus", 0) 
  End 
EndIf 
If  OpenScreen(1024,768,32,"Un test avec un sprite !") = 0 
  MessageRequester("Erreur", "Impossible d'ouvrir l'écran ", 0) 
  End 
EndIf 

   CreateSprite(1,80,30,#PB_Sprite_Alpha) 

  text$="New Game" 
 hb=30 
 lb=80 
 StartDrawing(SpriteOutput(1))  
 Box(0,0,lb,hb,RGB(211,201,189)) 
 LineXY(0,hb,0,0,RGB(255,255,255)) 
 LineXY(0,0,lb,0,RGB(255,255,255)) 
 LineXY(lb-1,0,lb-1,hb,RGB(0,0,0)) 
 LineXY(lb,hb-1,0,hb-1,RGB(0,0,0)) 
 DrawingMode(1) 
 xt=(lb-TextLength(text$))/2 
 yt=hb-25 
 Locate(xt,yt) 
 DrawText(text$) 
 StopDrawing() 
  
 Repeat 
   FlipBuffers() 
  ClearScreen(0, 0, 10) 
  DisplayAlphaSprite(1, 150, 500) 
  ExamineKeyboard() 


Until KeyboardPushed(#PB_Key_Escape) 
End


Publié : lun. 24/mai/2004 17:42
par Guimauve
Bon je vais aller l'étudier... Ça doit être une commande au sujet de la couche alpha.

A+
Guimauve

Publié : lun. 24/mai/2004 19:00
par Aranoth
Quelle erreure à tu exactement ?

Publié : lun. 24/mai/2004 19:54
par Good07
J'ai mis l'erreur que le débugger m'affiche lorsque je lance le programme.
Elle se situe sur la ligne StartDrawing.... :?:

Merci de vos réponses

A+

André.

Code : Tout sélectionner

If InitSprite() = 0 Or InitKeyboard() = 0 
  MessageRequester("Erreur", "Impossible d'initialiser DirectX 7 Ou plus", 0) 
  End 
EndIf 
If  OpenScreen(1024,768,32,"Un test avec un sprite !") = 0 
  MessageRequester("Erreur", "Impossible d'ouvrir l'écran ", 0) 
  End 
EndIf 

   CreateSprite(1,80,30,#PB_Sprite_Alpha) 

  text$="New Game" 
 hb=30 
 lb=80 
 StartDrawing(SpriteOutput(1));----> #Sprite object not initialzed ? ? ?  
 Box(0,0,lb,hb,RGB(211,201,189)) 
 LineXY(0,hb,0,0,RGB(255,255,255)) 
 LineXY(0,0,lb,0,RGB(255,255,255)) 
 LineXY(lb-1,0,lb-1,hb,RGB(0,0,0)) 
 LineXY(lb,hb-1,0,hb-1,RGB(0,0,0)) 
 DrawingMode(1) 
 xt=(lb-TextLength(text$))/2 
 yt=hb-25 
 Locate(xt,yt) 
 DrawText(text$) 
 StopDrawing() 
  
 Repeat 
   FlipBuffers() 
  ClearScreen(0, 0, 10) 
  DisplayAlphaSprite(1, 150, 500) 
  ExamineKeyboard() 


Until KeyboardPushed(#PB_Key_Escape) 
End 

Publié : lun. 24/mai/2004 20:08
par Guimauve
Sans vraiment savoir pourquoi, il semble que c'est le : CreateSprite(1,80,30,#PB_Sprite_Alpha) qui ne fait pas son travail. :? C'est très bizarre parce qu'avec un sprite normal, ça marche sans problème.

Mais une chose est sûr, le sprite doit être un image 256 couleurs.

C'est peut-être un bogue...

Un autre test avec un sprite transparent :

Code : Tout sélectionner

Procedure Souris()
     If MouseButton(1)
          If x1 = -1
               x1 = MouseX() : y1 = MouseY()
               x2 = x1 : y2 = y1
          Else
               x2 = MouseX() : y2 = MouseY()
          EndIf
     Else
          x1 = -1
     EndIf
     DisplayTransparentSprite(0, MouseX(), MouseY())
EndProcedure

If InitSprite() = 0 Or InitKeyboard() = 0 Or InitPalette() = 0 Or InitMouse() = 0
     MessageRequester("Erreur", "Impossible d'initialiser DirectX 7 Ou plus", 0)
     End
EndIf
If OpenScreen(1024, 768, 32, "Un test avec un sprite !") = 0
     MessageRequester("Erreur", "Impossible d'ouvrir l'écran ", 0)
     End
EndIf

CreateSprite(0, 16, 16)
StartDrawing(SpriteOutput(0))
      DrawingMode(4)
      LineXY(0, 0, 12, 12, RGB(160, 49, 255))
      LineXY(0, 1, 12, 13, RGB(160, 49, 255))
      LineXY(1, 0, 13, 12, RGB(160, 49, 255))
      LineXY(0, 0, 5, 0, RGB(160, 49, 255))
      LineXY(0, 0, 0, 5, RGB(160, 49, 255))
StopDrawing()


text$ = "New Game"
hb = 30
lb = 80

If CreateSprite(1, 80, 30) = 0
     Debug "La Création du sprite fait chier !!!"
Else
     StartDrawing(SpriteOutput(1))
          Box(0, 0, lb, hb, RGB(211, 201, 189))
          LineXY(0, hb, 0, 0, RGB(255, 255, 255))
          LineXY(0, 0, lb, 0, RGB(255, 255, 255))
          LineXY(lb - 1, 0, lb - 1, hb, RGB(0, 0, 0))
          LineXY(lb, hb - 1, 0, hb - 1, RGB(0, 0, 0))
          DrawingMode(1)
          xt = (lb - TextLength(text$)) / 2
          yt = hb - 25
          Locate(xt, yt)
          DrawText(text$)
     StopDrawing()
EndIf

Repeat
     
     FlipBuffers()
     ClearScreen(0, 0, 10)
     
     DisplaySprite(1, 150, 500)
     Souris()
     ExamineKeyboard()
     ExamineMouse()
     
Until KeyboardPushed(#PB_Key_Escape)
End
A+
Guimauve

Publié : lun. 24/mai/2004 20:23
par Aranoth
Ca ne peut etre que ton Create Sprite qui à échoué

Si tu veut etre sur fait un truc de debug:

Code : Tout sélectionner

IF CreateSprite(1,80,30,#PB_Sprite_Alpha) 
ELSE
Debug "marche po"
ENDIF

Publié : lun. 24/mai/2004 21:01
par Good07
Merci Guimauve :D

Comme cela ça marche , j'avais aussi essayé ce truc. La seule chose qui ne marche pas c'est quand on utilise la constante #PB_Sprite_Alpha mais je ne comprend pas pourquoi. Ce que voulais faire c'est un effet de couleur sur le bouton quand la souris passe dessus. Mais je vais peut être contourner ce problème.
Avec la version 3.90 ça ne marche pas ou alors il y a quelque chose qui m'échappe. :(

A+

André.

Publié : lun. 24/mai/2004 22:45
par Backup
je pense que c'est un vrai bug et qui date !!

j'utilise encore le v 3.80 (a mon sens la plus stable actuellement) :D

et son exemple plante aussi sur cette version !!

la ligne: rt=CreateSprite(1,80,30,#PB_Sprite_Alpha)

debug rt me renvoie 0 !!! donc pas initialisé !

Publié : mar. 25/mai/2004 17:12
par Good07
Bonsoir à tous !

Je crois que j'ai peut-être une explication à ce problème. En fait je pense que cela vient du fait que l'on ouvre un écran en 32 bits et que l'on essaye de faire fonctionner une commande qui devrait utiliser une couleur codée sous 8 bits.
Je pense que pour utiliser cette commande il faut passer par la commande CreatePalette() et c'est ce que je comptais essayer. Malheureusement l'exemple donné dans l'aide ne fonctionne même pas sur mon ordinateur qui n'affiche qu'un écran noir. :(

voici le code de l'aide.
j'ai un athlon xp3000+
avec une carte nvidia fx5200
Windows XP
PureBasic Version 3.90

Si quelqu'un peut tester le programme et me dire si il tourne réellement ..

Merci d'avance :D

André

Code : Tout sélectionner


;
; ------------------------------------------------------------
;
;   PureBasic - Palette example file
;
;    (c) 2002 - Fantaisie Software
;
; ------------------------------------------------------------
;
If InitSprite() = 0 Or InitKeyboard() = 0 Or InitPalette() = 0
  MessageRequester("Error", "Can't open DirectX 7 or later", 0)
  End
EndIf

If OpenScreen(640, 480, 8, "PureBasic - Palette Example")
  LoadSprite(0, "Data\AlphaChannel.bmp", 0)

  ; Build 256 precalculated palette to do a nice cycling effect !
  ;
  For Palette = 0 To 255
    CreatePalette(Palette)
      For Index = 0 To 255
        Color = Index+Palette
        If Color > 255
          Color - 256
        EndIf
        
        SetPaletteColor(Index-1, Color << 8)
      Next
  Next
  
  Palette = 0
  Repeat
    FlipBuffers()                                 ; Flip for DoubleBuffering
    
    DisplayPalette(Palette)
    DisplaySprite(0, 100, 100)
    
    Palette+1
    If Palette > 255 : Palette = 0 : EndIf
      
    ExamineKeyboard()
  Until KeyboardPushed(#PB_Key_Escape)
EndIf

End  
 
; ExecutableFormat=Windows
; EOF

Publié : mar. 25/mai/2004 17:21
par Heis Spiter
J'ai moi ce coe marche, j'ai une figure verte qui bouge avec un dégradé...
Rad 9200se

Publié : mar. 25/mai/2004 18:16
par Good07
Toutes mes excuses ! :oops:

Cela marche effectivement. J'ai utilisé un copier coller depuis l'aide vers PureBasic, seulement j'ai changé le chemin du dossiers des programmes pour ne pas tout mélanger. Mais si le sprite ne peut pas se charger la palette n'apparaît pas. Une fois l'image du sprite chargée correctement tout rentre dans l'ordre.
A ce sujet d'ailleurs le sprite est en niveau de gris profondeur 8bits 256 couleurs. J'en ai créé un autre avec un programme de dessin et cela marche aussi.

Merci pour votre aide :D

A+

André.

Publié : mar. 25/mai/2004 22:36
par Backup
good07 a dit :
l'aide ne fonctionne même pas sur mon ordinateur qui n'affiche qu'un écran noir.

j'ai eu ce probleme lorsque j'ai désactiver le debugeur !! :)
avec le débugeur j'avais le message d'erreur !!
mais bon maintenant ça marche d'apres Heis Spiter :)