Page 1 sur 1
sprite qui disparait
Publié : mar. 08/avr./2014 17:38
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
Re: sprite qui disparait
Publié : mar. 08/avr./2014 19:08
par graph100
poste des codes ! Faut pas demander si des codes sont nécessaires, quand c'est bizarre, poste un code.
Re: sprite qui disparait
Publié : mar. 08/avr./2014 20:12
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...)

Re: sprite qui disparait
Publié : mar. 08/avr./2014 20:44
par jmg49

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é....
merci bien ,
Re: sprite qui disparait
Publié : mer. 09/avr./2014 7:50
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
Re: sprite qui disparait
Publié : mer. 09/avr./2014 9:28
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.

Re: sprite qui disparait
Publié : mer. 09/avr./2014 9:39
par jmg49
raaah zut ! ça c'est censé n'être que pour la fonte de char pas interférer avec les autres sprites
merci !!
Re: sprite qui disparait
Publié : mer. 09/avr./2014 9:45
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

Re: sprite qui disparait
Publié : mer. 09/avr./2014 10:29
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

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 ....
Re: sprite qui disparait
Publié : mer. 09/avr./2014 10:41
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

Re: sprite qui disparait
Publié : mer. 09/avr./2014 10:57
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,
Re: sprite qui disparait
Publié : mer. 09/avr./2014 11:21
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ù, .
Re: sprite qui disparait
Publié : mer. 09/avr./2014 11:28
par Ar-S
Très sympa.
Par contre mets moins d'alpha sur ton logo "bio", il est vraiment trop sombre ainsi.
Re: sprite qui disparait
Publié : ven. 11/avr./2014 16:00
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