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)
:D voila si ca peut t'aider :D

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

Code : Tout sélectionner

 DisplayRaquette:
  DisplaySprite(#joueur,MouseX(),450)
 return
et appeler avec

Code : Tout sélectionner

gosub  DisplayRaquette

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 :D

l'avantage du purebasic c'est qu'il autorise toute sorte de facon de faire !
:D

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 ! :D