sprite qui disparait

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
jmg49
Messages : 153
Inscription : mer. 26/févr./2014 8:53

sprite qui disparait

Message par jmg49 »

Bonjour,

je continue mes essais de demomaking, j'ai dans mon projet un affichage simultané d'un starfield, un sinusscroll et un logo affiché par DisplayTransparentSprite

j'ai dans mon Enumeration mes constantes concernant les sprites #sprite1 #sprite2 etc ...

j'arrive au bout de mon projet et je constate un truc bizarre, lors de l'affichage du dernier écran avec starfield, sinus et logo le logo à disparu .....

j'ai donc tout repris pour voir où j'ai pu me planter, j'affiche le sinus scroll, en premier, j'ajoute ensuite le starfield et ensuite le logo, ok tout va bien ,

j'avais mis en commentaire les lignes Enumeration des sprites non utilisés je n'en laisse qu'un , celui de mon logo , c'est ok

je décommente une ligne de Enumeration en enlevant le ; devant #sprite2 par exemple, je relance le prog , je n'ai plus que le starfield et le sinus, plus de sprite (qui lui est bien enuméré , initialisé et censé s'afficher avec le DisplayTransparentSprite)

je remets mon ; tout refonctionne !..... une constante énumérée non utilisée bloque l'affichage du sprite ????? pourtant le sinus scroll est affiché avec DisplaytransparentSprite et est tjrs là lui !!!

je peux fournir le snippet des trois effets simultanés si j'ai pas été assez clair .... est ce un bug ? ou c'est de moi que vient le bug (plus probable...)

Merci
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: sprite qui disparait

Message par graph100 »

poste des codes ! Faut pas demander si des codes sont nécessaires, quand c'est bizarre, poste un code.
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: sprite qui disparait

Message par Ar-S »

C'est surement un soucis de numérotation de sprite lors de tes affichages.
As tu bien regardé les différentes possibilités d'énumration dans la doc (Enumeration [nom] [<constante> [Step <constante>]] ) ça peut s'avérer pratique et plus lisible qu'une énumération de base. Après ça peut être une histoire de flipbuffer, de clearscreen etc..
Mais pour aller plus loin, du code ! comme le dit Graph100.
On est pas devin mais on peut tout de même dire que probablement tu as raison sur ce point :
est ce un bug ? ou c'est de moi que vient le bug (plus probable...)
:mrgreen:
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
jmg49
Messages : 153
Inscription : mer. 26/févr./2014 8:53

Re: sprite qui disparait

Message par jmg49 »

:D je mettrais le code demain , je l'ai au taf , j'ai la chance de pouvoir coder au boulot ,

j'ai bien pensé au flipbuffer() mais , c'est vraiment quand je mets un #sprite non utilisé.... 8O

merci bien ,
jmg49
Messages : 153
Inscription : mer. 26/févr./2014 8:53

Re: sprite qui disparait

Message par jmg49 »

je mets un lien pour le code + les .jpg / png si vous voulez compiler et tester

http://www.sendspace.com/file/69xp9y

Code : Tout sélectionner

Global  xres.w , yres.w , loop.w ,xp.w , yp.w , t.s , tptr.w , sco.b
#ScreenWidth  = 800 : #ScreenHeight = 600 : #ScreenDepth  = 32
#scrw = 800
#scrh = 600
#centerofscrw = #scrw/2
#centerofscrh = #scrh/2
#scrd = 32

sco   = 0
tptr  = 1
t.s = "                                    "
t.s = t.s + "SINUS SCROLL JMG@2014  PUREBASIC !!!..............."
t.s = t.s + "POUR DU BASIC ......              "                               
t.s = t.s + "C'EST PLUTOT FLUIDE ............                  "
t.s = t.s + "                      "


UsePNGImageDecoder()  

SSum.w = 8000 ; Amount of Stars
Cspeed.f=22
CameraZ.f=0

Enumeration 
  
;#sprite         ; si je décommente cette ligne par exemple , #sprite3 ne s'affiche plus .....
;#sprite2
#sprite3
;#spritetxt
;#spritetxt2
EndEnumeration

Gosub InitStarField
;----------------
InitSprite()
InitKeyboard()
InitMouse()

OpenWindow(0,400,300,#scrw,#scrh,"Preview")
OpenWindowedScreen(WindowID(0),0,0,800,600)
SetFrameRate(60)

LoadSprite(#sprite3, "logobio5.png") 

font = LoadSprite (#PB_Any, "1.PNG")

For i = 0 To 29
  GrabSprite(i + 1, i * 8, i* 16, 240 - i * 8, 16)
Next


CentreX = (#ScreenWidth  - SpriteWidth(1))  / 2
CentreY = (#ScreenHeight - SpriteHeight(1)) / 2
Vitesse.f = 1.7
Angle.f = 0
Amplitude = 280
Pas.f = 3.8


;-------- MainLoop --------

Repeat
   
 Event= WaitWindowEvent(2)  
    FPS_Counter + 1
  If FPS_Counter >= FPS
    FPS = FPS_Counter * 1000 / (ElapsedMilliseconds() - FPS_ElapsedTime)                                           ; init FPS
    FPS_Counter = 0
    FPS_ElapsedTime = ElapsedMilliseconds()
  EndIf
  
  For i = 1 To 30
  DisplayTransparentSprite(i, CentreX + i * 4, CentreY + Sin((Angle + i * Pas * 2)  * 0.0174533) * Amplitude)
  
   Next i                                                                                                            ; Go Sine 
   Angle + Vitesse
Event= WaitWindowEvent(2)   
   ;//////////////////////////////
   cco = 0
   For cc = 0 To 25
      letter   = Asc(Mid(t.s, tptr+cc, 1))-31
      yCharPos = letter / 10
      xCharPos = letter % 10
      If xCharPos = -1 : xCharPos = 9
         ElseIf xCharPos > 0 : xCharPos = xCharPos - 1
      EndIf
      ClipSprite(font, xCharPos*32, yCharPos*33, 31, 32)
      DisplayTransparentSprite(font, sco+cco, 300+50*Sin((cc+cco+sco+m)/120))
      cco = cco + 32
   Next
   m   = m   -5
   sco = sco -3
   ;     
   If sco < -32
      tptr = tptr + 1
      sco = sco + 32
   EndIf
   ;     
   If tptr > Len(t.s)-30
      tptr = 1
   EndIf
  
;-----------------------------------starfield--------------------------------------------------------------------------------------  
  
   StartDrawing(ScreenOutput())
      
   Gosub DrawStarField
   DrawText(0, 0, "FPS : " + StrD(FPS, 1))   ;display FPS
   StopDrawing()
   Gosub MoveCamera
      
   FlipBuffers()
   ClearScreen($0)
   ExamineKeyboard()
   
   DisplayTransparentSprite(#sprite3,40,350,50)  ; Display logo bio
      
Until KeyboardPushed(#PB_Key_Escape)
End

;--------- Procs Starfield -------------

InitStarField:
; Structure of a star ...
Structure _3DStar
   x.f ; X-Coordinate
   y.f ; Y-Coordinate
   z.f ; Z-Coordinate
EndStructure
; Init Starfield ...
Dim Stars._3DStar(SSum)
For dummy = 0 To SSum
   Stars(dummy)\x = Random(10000)-5000
   Stars(dummy)\y = Random(10000)-5000
   Stars(dummy)\z = 100 + Random(1000)
Next dummy
Return

; ### Move Camera ###
MoveCamera:
If CameraZ>2000
   Direction=-1
   ElseIf CameraZ<-2000
   Direction=1
EndIf
If Direction=1 And Cspeed<10
   Cspeed=Cspeed+0.1
   ElseIf Direction=-1 And Cspeed>-10
   Cspeed=Cspeed-0.1
EndIf
CameraZ=CameraZ+Cspeed
Return

; #### Draw StarField ####
DrawStarField:
For dummy = 0 To SSum
   If Stars(dummy)\z<CameraZ
      Stars(dummy)\z=CameraZ+1000
      ElseIf Stars(dummy)\z>(CameraZ+1000)
      Stars(dummy)\z=CameraZ
   EndIf
   SX = Stars(dummy)\x / (Stars(dummy)\z-CameraZ)*100+#centerofscrw
   SY = Stars(dummy)\y / (Stars(dummy)\z-CameraZ)*100+#centerofscrh
   If (SX<#scrw) And (SY<#scrh) And (SX>1) And (SY>1)
      b.f = 255-(((Stars(dummy)\z)-CameraZ)*(255./1000.))
      c=Int(b)
      Plot ( SX, SY, RGB(c,c,c))
   EndIf
Next dummy
Return


; Epb


Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

Re: sprite qui disparait

Message par Fig »

Code : Tout sélectionner

For i = 0 To 29
  GrabSprite(i + 1, i * 8, i* 16, 240 - i * 8, 16)
Next
C'est là ton problème... #Sprite3 est egale à 0 quand c'est commenté.
Si tu dé-commente, #sprite3 est égale à 1 donc il y a un souci avec les sprites que tu initialise avec la boucle au dessus (ces sprites s'initialisent depuis le numéro 1 à 30 !!)

Tu écrase ton #sprite3 de cette manière. :wink:
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
jmg49
Messages : 153
Inscription : mer. 26/févr./2014 8:53

Re: sprite qui disparait

Message par jmg49 »

raaah zut ! ça c'est censé n'être que pour la fonte de char pas interférer avec les autres sprites

merci !!
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

Re: sprite qui disparait

Message par Fig »

Très sympa ton starfield, par contre, si je peux me permettre, je ne comprend pas pourquoi tu clip les lettres de ton scroll à chaque tour de boucle.
Tu devrais pouvoir les graber avant la boucle principale une bonne fois pour toute de 32 à 58 par exemple. (ça économiserai du temps)

Mais enfin, ça fonctionne bien comme ça, on a hâte de voir la suite :wink:
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
jmg49
Messages : 153
Inscription : mer. 26/févr./2014 8:53

Re: sprite qui disparait

Message par jmg49 »

le starfield, je l'ai trouvé je ne sais plus où, je l'ai modifié car il n'etait pas comme ça au départ, je fixerais le grab des sprites bientôt , c'est une question de compréhension et d'optimisation,

je suis déjà moins débutant....ça suis son cours
Fig a écrit : on a hâte de voir la suite :wink:
plutôt le début, c'est censé être la dernière phase, j'ai du stuff avant que je n'ai pas mis pour se concentrer sur la partie qui n'allait pas ,

il faut que je time tout ça pour synchro avec les musiques etc ....
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: sprite qui disparait

Message par Backup »

jmg49 a écrit :le starfield, je l'ai trouvé je ne sais plus où, .
surement tiré de ce code !
http://www.purebasic.fr/french/viewtopi ... 25#p159525

;)
jmg49
Messages : 153
Inscription : mer. 26/févr./2014 8:53

Re: sprite qui disparait

Message par jmg49 »

certainement, pas de credits pour les auteurs , je ne les ai pas trouvé du moins, et on avait l'autorisation de les utiliser...

j'ai fixé l'id de mon sprite écrasé à 100 , du coup ça passe et y'a de la marge,
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: sprite qui disparait

Message par Backup »

jmg49 a écrit :certainement, pas de credits pour les auteurs , je ne les ai pas trouvé du moins, et on avait l'autorisation de les utiliser...
les Auteurs sont cités dans le code
seul le Starfield n'avait pas d'auteurs cité

il provient de ce topic
http://forums.purebasic.com/english/vie ... =14&t=6182

une proposition de "starax" , surement tiré du code de "Keph_"
donc c'est l'un des deux l'auteur du StarField

pour les autres codes, le nom des auteurs respectifs, se trouve dans le listing ...
jmg49 a écrit :et on avait l'autorisation de les utiliser...
inutile d'etre sur la défensive, je ne t'ai rien reproché ;)
je répondais juste a ta question :
jmg49 a écrit :le starfield, je l'ai trouvé je ne sais plus où, .
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: sprite qui disparait

Message par Ar-S »

Très sympa.
Par contre mets moins d'alpha sur ton logo "bio", il est vraiment trop sombre ainsi.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: sprite qui disparait

Message par graph100 »

Pour ton utilisation des sprites de cette manière, le mieux est d'utiliser les index dynamiques : #pb_any
puis de les stocker dans un tableau. De cette manière tu es sur qu'aucun index n'est déjà pris avant.

Évidemment cette méthode implique de bien gérer les sprites, de manière à ne pas avoir de fuite de mémoire
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Répondre