ton sprite ne s'affiche pas pour 3 raisons
la premiere : tu cherches a l'afficher dans un evenement de timer
cependant, tu n'a pas creer de timer !!!
apres la creation de fenetre (voir code plus loin )
la deuxieme, tu charges un sprite (donc une image ) mais tu n'utilise aucun decodeur d'image
mettre
en debut de code si tu charges un Png par exemple
la troisieme , dans ton evenement timer , qui est sensé se produire chaque seconde , tu n'affiches pas ton sprite
dans le cas d'un evenement de timer, il est desynchro avec l'affichage de ton ecran
tu affiches bien les etoiles avec FlipBuffer()
mais que se passe t'il lorsqu'il y a un event de timer ?
ben ton sprite est posé a la coordonée que tu veux , puis .....il se passe du temps
et a la fin tu affiche les etoiles avec le flipbuffer ....
mais ton sprite lui , ben il n'a pas eu l'affichage a cause de la desynchro du timer
il faudrai donc ajouter un autre flipbuffer() dans la partie de l'evenement du timer ...
cependant tu aurai un sprite clignotant, puisque affiché Seulement SI event Timer detecté ..... pas terrible
de plus, 2 flipbuffer() dans un meme code, ben vaut mieux eviter, sinon bonjour les clignotements !
je te joint ton code un peu mieux modifié , mais sans utiliser de timer , (pourquoi t’embêter avec un timer ?? alors que tu ne semble pas maîtriser les bases ??? )
j'ai aussi supprimé une boucle Eventwindow() qui ne sert a rien ...
voici donc ton code sans utiliser le timer, (mais celui ci est present quand meme , car je n'ai pas voulu l'effacer , puisque je ne sais pas ce que tu veux en faire )
ps: ce code recupere un sprite sur l'internet ,comme ça tout le monde peut le tester sans avoir ton sprite
tu pourra indiquer le chemin vers ton sprite en desactivant
ma procedure LoadSprite_net() et en remettant la tienne (mise en commentaire )
voici le code :
Code : Tout sélectionner
;--- Initilisation :
;EnableExplicit
UsePNGImageDecoder()
If InitSprite()=0 Or InitKeyboard()=0
MessageRequester("Erreur", "Impossible d'initialiser le jeux ")
End
EndIf
;--- Les Constantes :
Enumeration Windows
#Main_Window
#TIM
#Sprite
EndEnumeration
Enumeration
#Etoile0
#Etoile1
EndEnumeration
Global Duree = 1000 ; durrée en millisec donc là on part sur un timer de 1 sec
;--- Déclaration des procedures:
;--- Procedure pour le dessin des 2 étoiles
Declare CreationEtoiles()
;---;--- Initialisation des paramètres de départ des étoiles
Declare Initialisation()
;--- Deplacement des étoiles
Declare Deplacement()
Declare.l LoadSprite_net(Adr$,nom_fichier$)
;--Structure pour les infos des étoiles
Structure NewSprite
Sprite.i
PosX.i
PosY.i
Vitesse.i
Id.b
EndStructure
;--- Gestion des étoiles
;---Nombre d'étoiles
#MaxEtoiles= 4990
;---Création d'un tableau pour les étoiles du scrolling
Global Dim etoiles.NewSprite(#MaxEtoiles)
;--- Variables globales diverses
ExamineDesktops()
Global gEvent
Global gWidth = DesktopWidth(0)
Global gHeight = DesktopHeight(0)-70 ; tenir compte de la barre de titre de la fenetre et de la barre des taches
Global gI
;---Création de la surface du jeu
OpenWindow(#Main_Window,0,0,gWidth,gHeight,"",#PB_Window_SystemMenu)
OpenWindowedScreen(WindowID(#Main_Window),0,0,gWidth,gHeight)
AddWindowTimer(#Main_Window, #TIM, 1000) ; <<<<<<<<< T'AS OUBLIé DE METTRE UN TIMER !!!! puisque tu veux un timer, il faut le mettre
; if LoadSprite(#Sprite, "test4.png")
;Else
; MessageRequester("erreur","pas pu charger le sprite")
;Endif
Global Sprite_net=LoadSprite_net("http://individual.icons-land.com/IconsPreview/3D-Food/PNG/128x128/FastFood_Hamburger.png","burger.png")
if Sprite_net=0
MessageRequester("erreur","pas pu charger le sprite, recommence")
End
Endif
;---Affichage des procedures :
CreationEtoiles()
Initialisation()
;---Boucle principale du jeux
Repeat
Select WaitWindowEvent(2)
Case #PB_Event_Timer
; If EventTimer() = #TIM
; ; Toutes les sec il va se passer ça !
; ;Value = (Value + 5) % 100
;
; TransparentSpriteColor(Sprite_net, rgb(255,255,255))
; DisplayTransparentSprite (Sprite_net, Value,gHeight/2) ; en relatif c'est mieux
; FlipBuffers() ; <<< si tu veux qu'on vois le sprite, il faut demander l'affichage
; EndIf
Case #PB_Event_CloseWindow
End
EndSelect
;--- Partie 2D
ClearScreen(RGB(0, 0, 0))
;--- Deplacement des étoiles pour le scrolling
Deplacement()
ExamineKeyboard()
; pas besoin de timer pour aficher un sprite
angle.f=angle.f+1
;Value = (Value + 5) % 100
Value=(gWidth/2)+(gWidth/2)* Sin(angle*#PI/180)
if angle=360:angle=1:endif
TransparentSpriteColor(Sprite_net, rgb(255,255,255))
DisplayTransparentSprite (Sprite_net, Value,gHeight/2) ; en relatif c'est mieux
FlipBuffers()
Until KeyboardReleased(#PB_Key_Escape)
;--- les procédures :
;---Dessins des 2 étoiles
Procedure CreationEtoiles()
CreateSprite(#Etoile0,2,2)
CreateSprite(#Etoile1,2,2)
;---Dessin de l'étoile blanche
StartDrawing(SpriteOutput(#Etoile0))
Box(0, 0, 2, 2, $FFFFFF)
StopDrawing()
;--Dessin de l'étoile grise
StartDrawing(SpriteOutput(#Etoile1))
Box(0, 0, 2, 2, $A9A9A9)
StopDrawing()
EndProcedure
;--- Initialisation des paramètres de départ des étoiles
Procedure Initialisation()
For gI = 0 To #MaxEtoiles
With etoiles(gI)
\PosY = Random(gHeight)
\PosX = Random(gWidth,0)
\Id = Random(1)
\Vitesse = Random(18,2)
EndWith
Next
EndProcedure
;--- Deplacement des étoiles
Procedure Deplacement()
For gI = 0 To #MaxEtoiles
With etoiles(gI)
DisplaySprite(\Id,\PosX,\PosY)
\PosY + \Vitesse
If \PosY >= gWidth
\PosY - gWidth
EndIf
EndWith
Next
EndProcedure
;
Procedure.l LoadSprite_net(Adr$,nom_fichier$)
; By Dobro
;Adr$=adresse du fichier image a charger
;nom_image$ = nom qu'on donne a cette image
; la procedure renvoi l'Id de l'image recupéré ou False en cas d'erreur
InitNetwork()
If ReceiveHTTPFile(Adr$, GetTemporaryDirectory()+nom_fichier$)
Sprite=LoadSprite(#pb_any, GetTemporaryDirectory()+nom_fichier$)
DeleteFile(GetTemporaryDirectory()+nom_fichier$)
ProcedureReturn Sprite
Else
ProcedureReturn #false
EndIf
EndProcedure
; Epb