Problème bête

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Stef Leflou
Messages : 5
Inscription : ven. 18/juin/2004 17:58

Problème bête

Message 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
Une dernière après j'arrête
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Message 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
Stef Leflou
Messages : 5
Inscription : ven. 18/juin/2004 17:58

Message 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
Une dernière après j'arrête
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message 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
fweil
Messages : 505
Inscription : dim. 16/mai/2004 17:50
Localisation : Bayonne (64)
Contact :

Message 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.
Mon avatar reproduit l'image de 4x1.8m présentée au 'Salon international du meuble de Paris' en janvier 2004, dans l'exposition 'Shades' réunisant 22 créateurs autour de Matt Sindall. L'original est un stratifié en 150 dpi.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message 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
Répondre