Page 1 sur 1
Problème bête
Publié : sam. 25/juin/2005 0:59
par Stef Leflou
Hello tout le monde,
voilà j'ai un souci vraiment idiot. Je n'arrive pas à déplacer un sprite à l'écran... Pourtant j'ai écris un programme très simple pour tester les procèdures (avec lesquelles je ne suis pas encore bien familiarisé).
Normalement, la balle devrait bouger vers la droite de l'écran et là rien du tout. Je peux juste bouger ma raquette avec la souris.
Code : Tout sélectionner
;Initialisation
InitSprite()
InitKeyboard()
InitMouse()
InitSound()
; Constantes
#joueur=1
#balle=2
;Initialisation écran
SetRefreshRate(60)
MaFenetre = OpenScreen(800,600,32,"Test")
If MaFenetre = 0
MessageRequester("Erreur", "Impossible d'ouvrir une fenêtre DirectX", #PB_MessageRequester_Ok)
EndIf
;Chargement sprites
LoadSprite(#joueur,"raquette.bmp")
LoadSprite(#balle,"balle.bmp")
Procedure DisplayRaquette()
DisplaySprite(#joueur,MouseX(),450)
EndProcedure
Procedure DisplayBalle()
ballex=ballex+1
DisplaySprite(#balle,ballex,balley)
EndProcedure
Repeat
ClearScreen(0,0,0)
ExamineMouse()
DisplayRaquette()
DisplayBalle()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
Autre chose aussi. Malgré Until KeyboardPushed, je suis obligé de sortir du programme à la sauvage. Le programme ne répond pas et me renvoie une erreur. Suis-je face à un bug ou est-ce moi qui ai codé avec les pieds ? Merci de votre aide
Publié : sam. 25/juin/2005 9:34
par graph100
premierement tu n'arrive pas a deplace le sprite a l'ecran
car dans les procedure les variable sont proteges sauf si tu utilise
Global truc.s , machin.l
dans ce cas truc.s et machin.l seront accessible partout dans le programme et les procedure
tu peut aussi utilise les parametre dans les procedure
displayballe(ballex)
et changer les absices dans la boucle
deuxiement
pour utiliser les touches du clavier il faut avoir mis
examinekeyboard()
ca regarde quelle sont les touches pressées
alors ton code donne ca :
Code : Tout sélectionner
; Initialisation
InitSprite()
InitKeyboard()
InitMouse()
InitSound()
; Constantes
#joueur = 1
#balle = 2
; Initialisation écran
SetRefreshRate(60)
MaFenetre = OpenScreen(800, 600, 32, "Test")
If MaFenetre = 0
MessageRequester("Erreur", "Impossible d'ouvrir une fenêtre DirectX", #PB_MessageRequester_Ok)
EndIf
; Chargement sprites
LoadSprite(#joueur, "raquette.bmp")
LoadSprite(#balle, "balle.bmp")
Procedure DisplayRaquette()
DisplaySprite(#joueur, MouseX(), 450)
EndProcedure
Procedure DisplayBalle(ballex)
DisplaySprite(#balle, ballex, balley)
EndProcedure
ballex = 0
Repeat
ballex = ballex + 1
ClearScreen(0, 0, 0)
ExamineMouse()
ExamineKeyboard()
DisplayRaquette()
DisplayBalle(ballex)
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)

voila si ca peut t'aider

Publié : sam. 25/juin/2005 9:48
par Stef Leflou
Merci mille fois. Tu m'étonne que ça m'aide. En fait, c'est même une des bases pour programmer en Pure et je suis passé à côté (ça m'apprendra à vouloir programmer comme on faisait il y a quinze ans !)
Ouf, bon je testerais tout ça un peu plus tard. Merci encore
Publié : sam. 25/juin/2005 12:40
par Backup
Stef Leflou a écrit :(ça m'apprendra à vouloir programmer comme on faisait il y a quinze ans !)
tu peux toujours programmer comme il y a 15 ans !!
au lieu de
Code : Tout sélectionner
Procedure DisplayRaquette()
DisplaySprite(#joueur,MouseX(),450)
EndProcedure
tu pouvais faire
et appeler avec
dans ce cas (les sous program) les variables sont automatiquement globale !
perso j'utilise beaucoup les sous-prog
avec une structure de programme equivalent a
; initialisation du programme
; debut de boucle
gosub a
gosub b
gosub c
gosub d
flipbuffer
; fin de boucle
a:
***
***
***
return
b:
***
***
***
return
c:
***
***
***
return
d:
***
***
***
return
les procedures sont les fonctions d'il y a 15 ans , utile pour retourner un parametre ou pour etre employée toute faite dans d'autre programme
mais ne sont pas un passage obligé !!
moi aussi je programme de facon old-school
l'avantage du purebasic c'est qu'il autorise toute sorte de facon de faire !

Publié : sam. 25/juin/2005 14:27
par fweil
Heuh !
Il y a 15 ans on était en 1990 ?
Il y avait déjà d'autres trucs que les Gosub non ?
Les Gosub j'ai connu ça la première fois en 1975 je crois.
Bon évidement ça ne change rien, excepté les performances du code.
Un Gosub ne coûte pas grand chose sauf l'effort du programmeur. Un appel de procédure est plus sympa pour le programmeur mais la gestion de la pile des registres coute du temps.
Moi je n'utilise plus de Gosub depuis longtemps, question de clarté du code. Mais je ne fais pas de reproche aux oldies. J'en suis.
Publié : sam. 25/juin/2005 15:31
par Backup
Il y a 15 ans on était en 1990 ?
oui , par la je reprenais le terme employé par Stef Leflou , qui voulait surement dire
"dans le vieux temps" ; bref avec les anciennes version de basic !
tu dit :
Il y avait déjà d'autres trucs que les Gosub non ?
je te rapelle que j'ai ecris :
les procedures sont les fonctions d'il y a 15 ans
dans beaucoup de basic ce qu'on appel procedure aujourd'hui , s'appelais alors des fonctions !
c'est a dire une variante de sous-programme qui retourne un argument !
en fait nous sommes bien d'accord !
