Page 1 sur 1
Aide pour sprite 2D
Publié : dim. 23/mai/2010 9:38
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
Re: Aide pour sprite 2D
Publié : dim. 23/mai/2010 9:52
par SPH
C'est parce que tu ouvres un ecran en 4 couleurs !!
Essaye ca et ca marchera :
Re: Aide pour sprite 2D
Publié : dim. 23/mai/2010 9:53
par Robrock55
Punaise je l'avais même pas vu ! Merci mille fois
C'est quand même l'air con moi je dit

Re: Aide pour sprite 2D
Publié : dim. 23/mai/2010 9:56
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)
Re: Aide pour sprite 2D
Publié : dim. 23/mai/2010 10:29
par Backup
................
Re: Aide pour sprite 2D
Publié : dim. 23/mai/2010 10:30
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.
Re: Aide pour sprite 2D
Publié : lun. 24/mai/2010 7:33
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
Re: Aide pour sprite 2D
Publié : lun. 24/mai/2010 8:17
par Robrock55
Tkt tkt, j'ai compris, c'est mon pote qui a merdé, j'lui dirais tout ca

Re: Aide pour sprite 2D
Publié : mar. 25/mai/2010 9:03
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
Re: Aide pour sprite 2D
Publié : mar. 25/mai/2010 14:15
par Backup
@TazNormand :
voila des codes avec une belle architecture

Re: Aide pour sprite 2D
Publié : mar. 25/mai/2010 15:24
par Robrock55
Merci beaucoup pour tous ces conseils les gars, en tout cas, une efficacité et une rapidité hors du commun
