Aide pour sprite 2D

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Robrock55
Messages : 65
Inscription : lun. 01/févr./2010 17:04
Localisation : Meuse
Contact :

Aide pour sprite 2D

Message par Robrock55 »

Bonjour ! Mon ami et moi sommes en train de tenter d'essayer de faire un projet en 2D sur purebasic.

Mon pote a réalisé un code, mais il y a une erreur que j'arrive vraiment pas à comprendre, même avec les tutos et la docs sous les yeux :(

Code : Tout sélectionner

;================================================== 
; Essai 2d 
; Let's go ! 
; V0.1 
;================================================== 
 
;Initialisation de l'espace de travail 
InitSprite()
OpenScreen(640,480,4,"Essai") 
InitKeyboard() 
KeyboardMode(#PB_Keyboard_International) 
ExamineKeyboard() 
 
; Déclaration des positions de départ, chargement du sprite 
X = 580 
Y = 580 
;CreateSprite(1,50,50) 
 
;Mise en place de la boucle 
Repeat 

FlipBuffers() 
ClearScreen(RGB(0,0,0)) 
;DisplaySprite(1,X,Y) 
StartDrawing(ScreenOutput()) 
Circle(200,200,20,RGB(Random(255),Random(255),Random(255))) 
StopDrawing() 

If KeyboardPushed(#PB_Key_Left) 
  Y = Y-2 
  ElseIf KeyboardPushed(#PB_Key_Right) 
  Y = Y+2 
EndIf 


Until KeyboardPushed(#PB_Key_Escape)
Votre aide serait la bienvenue :)

EDIT : Ah oui, l'erreur est à la ligne 25, ou la ligne "StartDrawing(ScreenOutput())"
ERROR : invalid memory access. (read error at adress 0)

Je tourne sur PB 4.40
Avatar de l’utilisateur
SPH
Messages : 4949
Inscription : mer. 09/nov./2005 9:53

Re: Aide pour sprite 2D

Message par SPH »

C'est parce que tu ouvres un ecran en 4 couleurs !!
Essaye ca et ca marchera :

Code : Tout sélectionner

OpenScreen(640,480,32,"Essai") 

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Robrock55
Messages : 65
Inscription : lun. 01/févr./2010 17:04
Localisation : Meuse
Contact :

Re: Aide pour sprite 2D

Message par Robrock55 »

Punaise je l'avais même pas vu ! Merci mille fois
C'est quand même l'air con moi je dit :lol:
Avatar de l’utilisateur
SPH
Messages : 4949
Inscription : mer. 09/nov./2005 9:53

Re: Aide pour sprite 2D

Message par SPH »

Pleins de petites erreurs quand meme. Tiens :

Code : Tout sélectionner

;================================================== 
; Essai 2d 
; Let's go ! 
; V0.1 
;================================================== 

;Initialisation de l'espace de travail 
InitSprite()
OpenScreen(640,480,32,"Essai") 
InitKeyboard() 
KeyboardMode(#PB_Keyboard_International) 

; Déclaration des positions de départ, chargement du sprite 
X = 320
Y = 240 
;CreateSprite(1,50,50) 

;Mise en place de la boucle 
Repeat 
ExamineKeyboard() 

FlipBuffers() 
ClearScreen(RGB(0,0,0)) 
;DisplaySprite(1,X,Y) 
StartDrawing(ScreenOutput()) 
Circle(x,y,20,RGB(Random(255),Random(255),Random(255))) 
StopDrawing() 

If KeyboardPushed(#PB_Key_Left) 
  x-2 
  ElseIf KeyboardPushed(#PB_Key_Right) 
  x+2 
EndIf 

Until KeyboardPushed(#PB_Key_Escape)


!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Aide pour sprite 2D

Message par Backup »

................
Dernière modification par Backup le sam. 01/oct./2011 11:40, modifié 1 fois.
Robrock55
Messages : 65
Inscription : lun. 01/févr./2010 17:04
Localisation : Meuse
Contact :

Re: Aide pour sprite 2D

Message par Robrock55 »

Bien, a vrai dire, mon pote et moi on commence depuis peu, donc c'est vrai que c'est pas très bien structuré, voir pas du tout.
Mais en plus, mon pote fait ses codes pas très bien et je dois repasser un minimum dessus

Avant :

Code : Tout sélectionner

;================================================== 
; Essai 2d 
; Let's go ! 
; V0.1 
;================================================== 
;Initialisation de l'espace de travail 
InitSprite()
OpenScreen(640,480,32,"Essai")  
InitKeyboard() 
KeyboardMode(#PB_Keyboard_International) 
ExamineKeyboard() 
 ; Déclaration des positions de départ, chargement du sprite 
X = 580 
Y = 580 
;CreateSprite(1,50,50) 
;Mise en place de la boucle 
Repeat 
FlipBuffers() 
ClearScreen(RGB(0,0,0)) 
;DisplaySprite(1,X,Y) 
StartDrawing(ScreenOutput()) 
Circle(200,200,20,RGB(Random(255),Random(255),Random(255))) 
StopDrawing() 
If KeyboardPushed(#PB_Key_Left) 
Y = Y-2 
ElseIf KeyboardPushed(#PB_Key_Right) 
Y = Y+2 
EndIf 
Until KeyboardPushed(#PB_Key_Escape)

Après :

Code : Tout sélectionner

;================================================== 
; Essai 2d 
; Let's go ! 
; V0.1 
;================================================== 
 
 
;Initialisation de l'espace de travail 
InitSprite()
OpenScreen(640,480,32,"Essai")  
InitKeyboard() 
KeyboardMode(#PB_Keyboard_International) 
ExamineKeyboard() 
 
 
;Déclaration des positions de départ, chargement du sprite 
X = 580 
Y = 580 
;CreateSprite(1,50,50) 
 
 
;Mise en place de la boucle 
Repeat 

FlipBuffers() 
ClearScreen(RGB(0,0,0)) 
;DisplaySprite(1,X,Y) 
StartDrawing(ScreenOutput()) 
Circle(200,200,20,RGB(Random(255),Random(255),Random(255))) 
StopDrawing() 

If KeyboardPushed(#PB_Key_Left) 
  Y = Y-2 
  ElseIf KeyboardPushed(#PB_Key_Right) 
  Y = Y+2 
EndIf 


Until KeyboardPushed(#PB_Key_Escape)
J'ai remis le code plein de bugs, c'était le seul sous la main.
Avatar de l’utilisateur
SPH
Messages : 4949
Inscription : mer. 09/nov./2005 9:53

Re: Aide pour sprite 2D

Message par SPH »

OpenScreen(640,480,32,"Essai")
=> Ecran un peu trop petit (prefere un ecran genre 1024/768)

ExamineKeyboard()
=> A mettre apres le REPEAT de ta boucle principale. Si tu n'interroges pas a chaque boucle ton keyboard, comment voudras tu que ton code execute ton "Until KeyboardPushed(#PB_Key_Escape)"

X = 580
Y = 580
=> Tu es sur de vouloir afficher hors ecran (ton ecran 640,480) ??

FlipBuffers()
=> A mettre juste avant de boucler (avant Until KeyboardPushed(#PB_Key_Escape))

Circle(200,200,20,RGB(Random(255),Random(255),Random(255)))
=> A 200,200 ? Tu es sur ? Alors a quoi servent ton X et Y ??

If KeyboardPushed(#PB_Key_Left)
Y = Y-2
ElseIf KeyboardPushed(#PB_Key_Right)
Y = Y+2
EndIf
=> Tu es sur que left et right concernent Y ?? Moi j'aurais dis X

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Robrock55
Messages : 65
Inscription : lun. 01/févr./2010 17:04
Localisation : Meuse
Contact :

Re: Aide pour sprite 2D

Message par Robrock55 »

Tkt tkt, j'ai compris, c'est mon pote qui a merdé, j'lui dirais tout ca :D
Avatar de l’utilisateur
TazNormand
Messages : 1297
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

Re: Aide pour sprite 2D

Message par TazNormand »

Salut

@ SPH : 1024x768, pourquoi pas, mais je suis plutôt partisan d'un DesktopWidth/DesktopHeight. J'aime utiliser la résolution de l'utilisateur.

Code : Tout sélectionner

;================================================== 
; Essai 2d 
; Let's go ! 
; V0.1 
;================================================== 


;Initialisation de l'espace de travail 
InitSprite()
InitKeyboard() 

ExamineDesktops()
DskW=DesktopWidth(0)
DskH=DesktopHeight(0)
DskD=DesktopDepth(0)

;Déclaration des positions de départ, chargement du sprite 
X = DskW/2 
Y = DskH/2 

; N'éxécuter le code que si l'ouverture d'écran s'est bien faite
If OpenScreen(DskW,DskH,DskD,"Essai")   
  KeyboardMode(#PB_Keyboard_International) 
  ;Mise en place de la boucle 
  Repeat 
    ExamineKeyboard() 
    If KeyboardPushed(#PB_Key_Left) 
	    Y = Y-2 
	  ElseIf KeyboardPushed(#PB_Key_Right) 
	    Y = Y+2 
    EndIf
    
    StartDrawing(ScreenOutput()) 
      Circle(X,Y,20,RGB(Random(255),Random(255),Random(255))) 
    StopDrawing() 
    
    FlipBuffers() 
    ClearScreen(RGB(0,0,0))
  Until KeyboardPushed(#PB_Key_Escape)
EndIf
End
Variante mais qui serait beaucoup mieux avec un sprite :

Code : Tout sélectionner

;================================================== 
; Essai 2d 
; Let's go ! 
; V0.1 
;================================================== 


;Initialisation de l'espace de travail 
InitSprite()
InitKeyboard() 

ExamineDesktops()
DskW=DesktopWidth(0)
DskH=DesktopHeight(0)
DskD=DesktopDepth(0)

;Déclaration des positions de départ, chargement du sprite 
X = DskW/2 
Y = DskH/2 
SensX=5
SensY=5

; N'éxécuter le code que si l'ouverture d'écran s'est bien faite
If OpenScreen(DskW,DskH,DskD,"Essai")   
  KeyboardMode(#PB_Keyboard_International) 
  ;Mise en place de la boucle 
  Repeat 
    ExamineKeyboard() 
    X=X+SensX
    If X<20 Or X>DskW-20
      sensX=SensX * -1
    EndIf
    Y=Y+SensY
    If Y<20 Or Y>DskH-20
      sensY=SensY * -1
    EndIf
    
    StartDrawing(ScreenOutput()) 
      Circle(X,Y,20,RGB(Random(255),Random(255),Random(255))) 
    StopDrawing() 
    
    FlipBuffers() 
    ClearScreen(RGB(0,0,0))
  Until KeyboardPushed(#PB_Key_Escape)
EndIf
End
Image
Image
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Aide pour sprite 2D

Message par Backup »

@TazNormand :
voila des codes avec une belle architecture :)
Robrock55
Messages : 65
Inscription : lun. 01/févr./2010 17:04
Localisation : Meuse
Contact :

Re: Aide pour sprite 2D

Message par Robrock55 »

Merci beaucoup pour tous ces conseils les gars, en tout cas, une efficacité et une rapidité hors du commun :D :mrgreen:
Répondre