Page 1 sur 1

possible bug avec les sprites #PB_Sprite_Texture

Publié : dim. 19/oct./2008 13:02
par case
voila je ne comprend pas ce qui ne vas pas a chaque lancement j'obtiens un resultat different a l'affichage.

est-ce un bug ? est-ce que quelqu'un peux eclairer ma lanterne ?

il n'y a un probleme qu'avec les sprite #pb_sprite_texture, que je l'affiche en 3D ou pas

Code : Tout sélectionner

;
;-----------initialisations
If InitSprite() = 0 Or InitKeyboard()=0 Or InitSound()=0 Or InitMouse()=0 
  MessageRequester("Error","DirectX 7+ is needed.",0)
EndIf
If InitSprite3D()=0
  MessageRequester("Error","the game need a proper 3D card to work",0)
EndIf


;-----------ouverture ecran--------------
Global main=OpenWindow(#PB_Any,0,0,800,800,"",#PB_Window_ScreenCentered |#PB_Window_SystemMenu )
Global screen=OpenWindowedScreen(WindowID(main),0,0,800,800,0,0,0)

grid=CreateSprite(#PB_Any,64,64,#PB_Sprite_Texture)
grid2=CreateSprite(#PB_Any,64,64)
UseBuffer(grid)
ClearScreen($444444)
StartDrawing(SpriteOutput(grid))
Box(0,0,64,64,0)
Box(0,0,10,10,$ffffff)
StopDrawing()
UseBuffer(grid2)
ClearScreen($444444)
StartDrawing(SpriteOutput(grid2))
Box(0,0,64,64,0)
Box(0,0,10,10,$ffffff)
StopDrawing()
grid3D=CreateSprite3D(#PB_Any,grid)

UseBuffer(#PB_Default)



Repeat   
  ClearScreen(0)
  ev=WaitWindowEvent(1) 
	x= WindowMouseX(main)
	y= WindowMouseY(main) 
	    Start3D()
        DisplaySprite3D(grid3D,x,y,150)
      Stop3D()
        DisplayTransparentSprite(grid2,x+64,y)
        DisplayTransparentSprite(grid,x+128,y)

  FlipBuffers()
  
Until ev= #PB_Event_CloseWindow

Publié : dim. 19/oct./2008 14:57
par Backup
tu veux obtenir quoi comme resultat ??

et qu'a tu voulu faire avec ça ?

Code : Tout sélectionner

Box(0,0,64,64,0)
Box(0,0,10,10,$FFFFFF)
8O 8O

deja le premier box sert a rien , puisque tu dessine un carré noir !!

il est déjà noir par défaut !! :)

précise ce que tu veux obtenir .. :)

ps : de plus inutile de faire ça

Code : Tout sélectionner

grid3D=CreateSprite3D(#PB_Any,grid) 
puisque ça , seulement suffit !!

Code : Tout sélectionner

CreateSprite3D(grid3D,grid) 
apres cette fonction de toute façon le sprite 3D sera "grid3D" :)


je ne vois pas ou tu veux en venir avec tes

Code : Tout sélectionner

UseBuffer(grid)
puisque tu defini deja que tu dessine dans le sprite avec

Code : Tout sélectionner

StartDrawing(SpriteOutput(grid))
:)


j'ai viré (mis en REM ) selon moi les lignes qui servent a rien :)
et j'ai corrigé ce que j'ai dit plus haut ! :)

mais je ne sais toujour pas le resultat que tu veux obtenir :)

Code : Tout sélectionner

;
;-----------initialisations
If InitSprite() = 0 Or InitKeyboard()=0 Or InitSound()=0 Or InitMouse()=0
      MessageRequester("Error","DirectX 7+ is needed.",0)
EndIf
If InitSprite3D()=0
      MessageRequester("Error","the game need a proper 3D card to work",0)
EndIf


;-----------ouverture ecran--------------
Global main=OpenWindow(#PB_Any,0,0,800,800,"",#PB_Window_ScreenCentered |#PB_Window_SystemMenu )
Global screen=OpenWindowedScreen(WindowID(main),0,0,800,800,0,0,0)

grid=CreateSprite(#PB_Any,64,64,#PB_Sprite_Texture)
grid2=CreateSprite(#PB_Any,64,64)
;UseBuffer(grid)
;ClearScreen($444444)
StartDrawing(SpriteOutput(grid))
     ; Box(0,0,64,64,0)
      Box(0,0,10,10,$FFFFFF)
StopDrawing()
;UseBuffer(grid2)
;ClearScreen($444444)
StartDrawing(SpriteOutput(grid2))
      ;Box(0,0,64,64,0)
      Box(0,0,10,10,$FFFFFF)
StopDrawing()
CreateSprite3D(grid3D,grid)

;UseBuffer(#PB_Default)



Repeat   
      ClearScreen(0)
      ev=WaitWindowEvent(1)
      x= WindowMouseX(main)
      y= WindowMouseY(main)
      Start3D()
            DisplaySprite3D(grid3D,x,y,150)
      Stop3D()
      DisplayTransparentSprite(grid2,x+64,y)
      DisplayTransparentSprite(grid,x+128,y)
      
      FlipBuffers()
      
Until ev= #PB_Event_CloseWindow 

Publié : dim. 19/oct./2008 16:33
par case
en fait j'ai oublié d'enlever certaines lignes innutiles, dans le programme original ces lignes me servent :)

de meme que le rectangle noir car j'utilise une autre couleur tranparente
et le rectangle noir est dessiné de maniere a assombrir une partie de l'image de fond

ceci dit le bug que je rencontre est le suivant
quand j'affiche les 3 sprites ils ne sont pas toujours identiques...

exemple

Image

normalement je devrais avoir trois carres identiques

espaces de 64 pixels

je precise je suis sur la 4.20

Publié : dim. 19/oct./2008 17:24
par Backup
case a écrit : ceci dit le bug que je rencontre est le suivant
quand j'affiche les 3 sprites ils ne sont pas toujours identiques...
Image
je n'obtient pas du tout cette image avec le code que tu as posté en premier !! 8O 8O

voici ce que j'obtiens avec la v 4.20

Image

Publié : dim. 19/oct./2008 18:32
par case
logiquement je devrais avoir trois carres alignes comme sur ton image

mais visiblement les fonctions 2D sur une #pb_sprite_texture semblent fonctionner bizarement chez moi.

ati radeon 4870 ici...

bon c'est pas super grave comme bug mais ca m'oblige a utiliser un workaround a savoir dessiner sur un sprite normal puis faire un grabsprite de celui ci avec le flag pour les textures.. une operation de plus normalement j efais pas ca en realtime donc bon. je peux vivre avec