Page 1 sur 1
pb affichage
Publié : jeu. 10/juil./2008 16:28
par chikun
je sais , y a du boulot avec moi.....
voilà, je suis dans une boucle d'animation d'un sprite (openscreen)
et je voudrais introduire moi meme dans cette boucle la valeur d'un angle
mais si j'utilise du val(input$()) ça ne fonctionne pas dans cette fenetre....
ça je sais , mais comment faire ? (sans ouvrir console):roll:
Publié : jeu. 10/juil./2008 16:50
par Thyphoon
tu devrais étudier la fonction OpenWindowedScreen()
ça te permettra d'avoir un screen tout en ayant la possibilité de mettre des gadget dans le reste de la fenêtre et donc de saisir un angle...
Si tu veux du 100% OpenScreen, il existe une lib qui permet d'avoir des gadgets faut chercher sur le forum anglais.
j'espère que ça t'aura aidé.
Publié : jeu. 10/juil./2008 16:56
par Backup
voici un exemple d'ecran+ gadget
ici le gadget est un bouton, mais tu peux mettre tout type de gadget
Code : Tout sélectionner
; Codé par Dobro
; en purebasic 4.02
;- Window Constants
;
Declare Open_Window_0()
Enumeration
#Window_0 ; numero de la fenetre
#sprite ; numero du sprite
#Button_0 ; numero du bouton
EndEnumeration
Structure sprite
num.l ; numero du sprite
x.l ; la coordonée x du sprites
Y.l ; la coordonée y du sprites
sensx.l ; le sens du deplacement x du sprite
sensy.l ; le sens du deplacement y du sprite
coul.l ; la couleur du sprite
EndStructure
nombre_de_Sprite=8
Dim sprite.sprite(nombre_de_Sprite)
For i=1 To nombre_de_Sprite
CallDebugger
sprite(i)\x=Random(200) +32; on donne une coordonée de depart au sprite
sprite(i)\Y=Random(200)+32
de=Random(1)
If de=1
sprite(i)\sensx=4 ; on donne un sens de deplacement par defaut au sprite
sprite(i)\sensy=4 ; ce chiffre correspond a la vitesse de deplacement du sprite
Else
sprite(i)\sensx=-4 ; on donne un sens de deplacement par defaut au sprite
sprite(i)\sensy=4 ; ce chiffre correspond a la vitesse de deplacement du sprite
EndIf
sprite(i)\coul = RGB(Random(200)+50,Random(200)+50,Random(200)+50) ; attribut une couleur
Next i
;
InitSprite()
Open_Window_0() ; appel de la procedure qui ouvre la fenetre
; ****** creation des sprites *********
For i=1 To nombre_de_Sprite
CreateSprite(i,16,16) ; creation d'une cellule vide (un sprite)
StartDrawing( SpriteOutput(i)) ; on va dessiner dans notre sprite un carre coloré
Box(1,1,16,16,sprite(i)\coul) ; voila le dessin du carre vert dans notre sprite
StopDrawing()
Next i
;**************************************
Repeat ; boucle principale , qui gere les affichages dans l'ecran graphique et les evenement de la fenetre
Event = WindowEvent() ; attends de recevoir un evenements de la fenetre
Delay (1)
WindowID = EventWindow() ; The Window where the event is generated, can be used in the gadget procedures
GadgetID = EventGadget() ; Is it a gadget event?
EventType = EventType() ; The event type
;You can place code here, and use the result as parameters for the procedures
If Event = #PB_Event_Gadget
If GadgetID = #Button_0
Debug "appuis sur le bouton ok"
End
EndIf
EndIf
For i=1 To nombre_de_Sprite
sprite(i)\x= sprite(i)\x+sprite(i)\sensx ; on lance le sprite
sprite(i)\y=sprite(i)\y+sprite(i)\sensy
; on va tester les sortie de l'ecran pour creer des rebonds
; les verticales
If sprite(i)\y<0 ; sort par le haut !!
sprite(i)\sensy=-sprite(i)\sensy ; on inverse le deplacement vertical
EndIf
If sprite(i)\y>350-16 ; sort par le bas !!
sprite(i)\sensy=-sprite(i)\sensy ; on inverse le deplacement vertical
EndIf
; les horizontales
If sprite(i)\x<0 ; sort par la gauche
sprite(i)\sensx=-sprite(1)\sensx ;on inverse le deplacement horizontal
EndIf
If sprite(i)\x>400-16 ; sort par la droite
sprite(i)\sensx=-sprite(i)\sensx ;on inverse le deplacement horizontal
EndIf
; ********** fin des test de sorti d'ecran *****************
; **************Affichage du sprite ***********
DisplaySprite(i,sprite(i)\x,sprite(i)\y)
Next i
FlipBuffers()
ClearScreen(RGB(0,0,0)) ; on nettoie l'ecran pour le prochain affichage
; *****************************************
Until Event = #PB_Event_CloseWindow ; End of the event loop
End
;
Procedure Open_Window_0()
If OpenWindow(#Window_0, 363, 117, 472, 423, "test", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar ) ; on ouvre une fenetre
OpenWindowedScreen(WindowID(#Window_0), 50, 10, 400, 350, 0, 1, 1) ; on creer un ecran graphique dedans
If CreateGadgetList(WindowID(#Window_0)) ; la liste gadget pour la gestion des gadgets (ici un bouton)
ButtonGadget(#Button_0, 30, 370, 70, 30, "ok") ; voila le bouton
EndIf
EndIf
EndProcedure
Publié : ven. 11/juil./2008 14:31
par chikun
merci les mecs
mais dans ta routine Dobro, j'ai: "execution arrétée (CallDebugger)" ?, ecrit tout en bas à gauche, faut que je fasse quoi ? quesqu'il me veut
je retourne voir ça
Publié : ven. 11/juil./2008 15:50
par comtois
Tiens je viens de réaliser en lisant ton pseudo
Chikun c'est pour faire référence à la chikungunya ?
Publié : ven. 11/juil./2008 15:50
par chikun
zut!! plus le temps , mais je code dés demain ap midi jusqu'à lundi soir
aidez moi (voir question au milieu du de ce code)
promis j'etudirais "openwindows" apres.....
Code : Tout sélectionner
InitSprite()
OpenScreen(1024, 768, 32, "squelette ecran")
; 992,736
InitKeyboard()
InitMouse()
Structure boule
xb.w
yb.w
sensx.b
sensy.b
EndStructure
Dim boule.boule(2)
CreateSprite ( 1,32,32) ; on cree un sprite (une balle)
StartDrawing ( SpriteOutput (1) ) ; on va dessiner dans le sprite
Circle (16, 16, 16, RGB (255,0,0)) ; on dessine un rond dedans(dans le sprite)
StopDrawing ()
CreateSprite ( 2,100,100) ; on cree un sprite (une balle)
StartDrawing(SpriteOutput (2))
Circle(16,16,16,RGB(0,255,0))
StopDrawing()
boule(2)\xb=600 : boule(2)\yb=200
Repeat
; xxxxxxxxxxxxxxxxxxxxxxxxx ICI JE VEUX CHOISIR L'ANGLE MOI MEME A CHAQUE FOIS!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!XXXXXXXXXXXXXXXXXXX
boule(1)\xb=992/2 : boule(1)\yb=736/2
StartDrawing(SpriteOutput (2))
Circle(16,16,16,RGB(255,255,0))
StopDrawing()
For t=1 To 30
xx=boule(1)\xb+10*Cos(angle*#PI/180)
yy=boule(1)\yb+10*Sin(angle*#PI/180)
StartDrawing ( ScreenOutput () )
DrawText (0,0, "angle: "+ Str(angle), RGB (255,255,0), RGB (0,0,0))
StopDrawing ()
boule(1)\xb=xx : boule(1)\yb=yy
For i=1 To 2
DisplayTransparentSprite(i,boule(i)\xb,boule(i)\yb)
Next i
FlipBuffers()
ClearScreen(RGB(0, 0,0))
ExamineKeyboard()
If KeyboardPushed(#PB_Key_Escape)
End
EndIf
Next t
ForEver
Publié : ven. 11/juil./2008 15:56
par Thyphoon
AAAAAAAAAAaaaaaa ces jeunes faut tout leur mâcher, aucune patience,
Allez je suis bon prince...
rajoute ce code...
Code : Tout sélectionner
; xxxxxxxxxxxxxxxxxxxxxxxxx ICI JE VEUX CHOISIR L'ANGLE MOI MEME A CHAQUE FOIS!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!XXXXXXXXXXXXXXXXXXX
ExamineKeyboard()
If KeyboardPushed(#PB_Key_Up) And angle<360
angle=angle+5
EndIf
If KeyboardPushed(#PB_Key_Down) And angle>0
angle=angle-5
EndIf
Publié : ven. 11/juil./2008 17:21
par chikun

toi alors!
merci, vous n'allez pas le regrettez .....
c'est plus rapide que de lire le manuel, on repond directement à ce qu'on demande....
vraiment sympa et encore merci , j'ai du boulot maintenent....
Publié : ven. 11/juil./2008 18:08
par chikun
heu...STOP!? non, c pas bon , dsl, je veux pouvoir entrer la valeur moi meme, la plus courte façon svp....
bon, peut etre que la plus courte façon c'est celle que me préconise monsieur Dobro..... ça a bien changé, mais il est vrai , c'est bien pllus rapide "la pure"..
Mr Comtois: Bravo, tu as gagné une tringle à rideau.....c'est effectivement le chikungunya (horto ?). je suis à la reunion ...
Mr Dobro es ce vraiment la façon la plus courte ?

Publié : ven. 11/juil./2008 20:28
par Backup
voila
Code : Tout sélectionner
; Codé par Dobro
; en purebasic 4.02
;- Window Constants
;
Declare Open_Window_0()
Enumeration
#Window_0 ; numero de la fenetre
#sprite ; numero du sprite
#Button_0 ; numero du bouton
#Sprite3D
#text
EndEnumeration
InitSprite():InitSprite3D()
Open_Window_0() ; appel de la procedure qui ouvre la fenetre
; ****** creation des sprites *********
CreateSprite(#sprite,64,64,#PB_Sprite_Texture) ; creation d'une cellule vide (un sprite)
StartDrawing( SpriteOutput(#sprite)) ; on va dessiner dans notre sprite un carre coloré
Box(1,1,64,64,RGB(255,255,0)) ; voila le dessin du carre vert dans notre sprite
StopDrawing()
CreateSprite3D(#Sprite3D, #sprite)
;**************************************
Repeat ; boucle principale , qui gere les affichages dans l'ecran graphique et les evenement de la fenetre
event = WindowEvent() ; attends de recevoir un evenements de la fenetre
Delay (1)
WindowID = EventWindow() ; The Window where the event is generated, can be used in the gadget procedures
GadgetID = EventGadget() ; Is it a gadget event?
EventType = EventType() ; The event type
; ********************************* regarde les evenements de gadget ***************************
If event = #PB_Event_Gadget
If GadgetID = #Button_0 ; on a appuiyé sur le bouton..!!
angle.f= ValF(GetGadgetText(#String)) ; on recupere l'angle du String_gadget
RotateSprite3D(#Sprite3D,angle,1) ; on fait executer la commande de rotation au sprite 3D
EndIf
EndIf
; ****************************************************************************
; **************Affichage du sprite ***********
Start3D() ; utilisation d'un sprite 3D
DisplaySprite3D(#Sprite3D,363/2,117/2) ; plus simple pour les rotation
Stop3D()
;***************************************
FlipBuffers() ; execute l'affichage
ClearScreen(RGB(0,0,0)) ; on nettoie l'ecran pour le prochain affichage
; *****************************************
Until event = #PB_Event_CloseWindow ; End of the event loop
End
;
Procedure Open_Window_0()
If OpenWindow(#Window_0, 363, 117, 472, 423, "test", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar ) ; on ouvre une fenetre
OpenWindowedScreen(WindowID(#Window_0), 50, 10, 400, 350, 0, 1, 1) ; on creer un ecran graphique dedans
If CreateGadgetList(WindowID(#Window_0)) ; la liste gadget pour la gestion des gadgets (ici un bouton)
ButtonGadget(#Button_0, 30, 370, 70, 30, "ok") ; voila le bouton
StringGadget(#String, 100, 370, 100, 30, "0" ,#PB_String_Numeric )
TextGadget(#text, 200, 370,200, 30, "<--entre un nombre de degres puis OK")
EndIf
EndIf
EndProcedure
Publié : sam. 12/juil./2008 14:42
par chikun

(tout ça à apprendre !!?, ok merci monsieur le professeur, mais têtue que je suis , je me suis dem.... à base de console (input()) et ça marche...
Dobro ferme les yeux stp (vous savez que pratiquement tout ce que j'ai appris c lui et pas le manuel!, fo le soigner cet hom là )...