pb affichage

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
chikun
Messages : 185
Inscription : sam. 21/juin/2008 13:36

pb affichage

Message 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:
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message 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é.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message 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
chikun
Messages : 185
Inscription : sam. 21/juin/2008 13:36

Message par chikun »

merci les mecs :D

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

je retourne voir ça
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

Tiens je viens de réaliser en lisant ton pseudo
Chikun c'est pour faire référence à la chikungunya ?
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
chikun
Messages : 185
Inscription : sam. 21/juin/2008 13:36

Message par chikun »

zut!! plus le temps , mais je code dés demain ap midi jusqu'à lundi soir :lol:

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
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message 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
chikun
Messages : 185
Inscription : sam. 21/juin/2008 13:36

Message par chikun »

:? toi alors! :lol:

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....
chikun
Messages : 185
Inscription : sam. 21/juin/2008 13:36

Message 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 ? :(
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message 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

chikun
Messages : 185
Inscription : sam. 21/juin/2008 13:36

Message par chikun »

8O (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à )...
Répondre