Pour YOGI

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Pour YOGI

Message par Ar-S »

~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
yogi
Messages : 90
Inscription : sam. 06/août/2016 15:55
Localisation : dijon
Contact :

Re: Pour YOGI

Message par yogi »

superbe ! haha les infinit bobs j'adore ! bref superbe starfield aussi ! je sens que je vais me prendre deux mois pour bien tout étudier :)
grand merci à toi j'ai aussi un vidéo clip à faire mais je compte le commencer en janvier donc ca va aller j'espère (mon temps libre sur purebasic :) ^^^)

TRÈS bonne soirée à toi copaing ^^

edit: et la gestion du timer que je ne connaissais pas ! je vais étudier tout cela :) grand merci
hop ici grosse tour a moué: pentium G3258 à 3.20ghz + 16go de ram + 650gtx
sinon laptop bout de plastique 2 x centrino 1.8 ghz + 4 go de ram
Le tout sous Deepin OS 64b le bonheur :) et plein de virtualbox :)
Avatar de l’utilisateur
yogi
Messages : 90
Inscription : sam. 06/août/2016 15:55
Localisation : dijon
Contact :

Re: Pour YOGI

Message par yogi »

bon j'ai enfin compris ton code sauf le timer :( va falloir que je comprenne car ça m'intéresse au plus haut point.
merci pour tous les effets, si tu es ok je vais en prendre certains. sinon le truc d'afficher l'image en dernier pour qu'elle soit dessus, c'est logique mais je ne savais pas bref je vais m'y mettre demain matin

je vais essayer de trouver de la doc pour le timer, capter comment cela marche

à très bientôt
hop ici grosse tour a moué: pentium G3258 à 3.20ghz + 16go de ram + 650gtx
sinon laptop bout de plastique 2 x centrino 1.8 ghz + 4 go de ram
Le tout sous Deepin OS 64b le bonheur :) et plein de virtualbox :)
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Pour YOGI

Message par Ar-S »

Le timer est vraiment pas compliqué

J'ai repris le code de la doc avec enumerations et quelques commentaires en plus.

Code : Tout sélectionner




Enumeration 
  #FEN ; ta fenetre
  #TIM; ton timer
  #BAR; ta barre
EndEnumeration

Global Duree = 1000 ; durrée en millisec donc là on part sur un timer de 1 sec
  
If OpenWindow(#fen, 0, 0, 400, 100, "Exemple Minuteur", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    ProgressBarGadget(#BAR, 10, 10, 380, 20, 0, 100)
    
    ; Ajout du minuteur #TIM dans la fenêtre #FEN  qui se déclenchera toutes les 1sec
    AddWindowTimer(#FEN, #TIM, Duree)
    
    
    Value = 0
    Repeat
      Event = WaitWindowEvent()
      
      If Event = #PB_Event_Timer And EventTimer() = #TIM
        ; Toutes les sec il va se passer ça !
        Value = (Value + 5) % 100
        SetGadgetState(#BAR, Value)
      EndIf    
      
    Until Event = #PB_Event_CloseWindow
  EndIf


~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
yogi
Messages : 90
Inscription : sam. 06/août/2016 15:55
Localisation : dijon
Contact :

Re: Pour YOGI

Message par yogi »

coucou toi

ok je vais étudier cela :)
grand merci à toi

becos
hop ici grosse tour a moué: pentium G3258 à 3.20ghz + 16go de ram + 650gtx
sinon laptop bout de plastique 2 x centrino 1.8 ghz + 4 go de ram
Le tout sous Deepin OS 64b le bonheur :) et plein de virtualbox :)
Marc56
Messages : 2196
Inscription : sam. 08/févr./2014 15:19

Re: Pour YOGI

Message par Marc56 »

Exemple de timer avec une pendule

Code : Tout sélectionner

; S'obliger à déclarer les variables 
; (évite les les erreurs par bêtes fautes de frppae ;-)
EnableExplicit

; Laisser PB affecter des numéros aux objets
; On est ainsi sûr de ne pas utiliser le même numéro par erreur
Enumeration 
     #Win
     #Txt
     #Timer
EndEnumeration
; Dans un programme plus grand on utilise les énumération nommées

; Ouvrir une fenêtre (centrée et avec le menu système et la case de fermeture)
; (Note: Pour la lisibilité, en PB on peut couper les lignes après , + - * / )
; (L'indentation automatique va aligner correctement le tout)
; (Note2: Avant "livraison" il est conseillé de faire CTRL+A puis CTRL+I)
; (Ce qui va tout réindenter correctement)
OpenWindow(#Win, 0, 0, 300, 100, "Horloge", 
           #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

; Créer une zone de texte (le texte sera centré horizontalement)
TextGadget(#Txt, 100, 40, 90, 20, "Hello World!", #PB_Text_Center)

; Ajouter un timer (délai en milliseconde)
; Un timer est toujours lié à une fenêtre!
AddWindowTimer(#Win, #Timer, 1000)

; Boucle principale (méthode classique)
; On utilise maintenant souvent la méthode Bind...
; Qui permet le déclenchement immédiat. (à suivre...)
Repeat
     ; Scruter la file d'évènement 
     ; = s'arrêter dès qu'il se passe quelque-chose
     ; + Voir si un des évènements correspond à un cas listé
     Select WaitWindowEvent()
               
          Case #PB_Event_CloseWindow
               ; L'utilisateur a cliqué sur la case de fermeture de la fenêtre
               ; Quitter la boucle principale
               Break
               ; On aurait pu aussi mettre directement End
               ; Mais on peut parfois avoir des choses à faire
               ; avant de quitter complètement un programme (sauvegarde)
               
          Case #PB_Event_Timer
               ; Un évènement de type timer s'est déclenché 
               If EventTimer() = #Timer
                    ; Si ce timer est le timer 1
                    ; On écrit la nouvelle heure
                    ; (FormatDate() utilise le même système que printf en C)
                    SetGadgetText(#Txt, FormatDate("%hh:%ii:%ss", Date()))
               EndIf
               
     EndSelect
ForEver

End
Même chose mais en méthode Bind...

Code : Tout sélectionner

; S'obliger à déclarer les variables 
; (évite les les erreurs par bêtes fautes de frppae ;-)
EnableExplicit

; Laisser PB affecter des numéros aux objets
; On est ainsi sûr de ne pas utiliser le même numéro par erreur
Enumeration 
     #Win
     #Txt
     #Timer
EndEnumeration
; Dans un programme plus grand on utilise les énumération nommées

; Ouvrir une fenêtre (centrée et avec le menu système et la case de fermeture)
; (Note: Pour la lisibilité, en PB on peut couper les lignes après , + - * / )
; (L'indentation automatique va aligner correctement le tout)
; (Note2: Avant "livraison" il est conseillé de faire CTRL+A puis CTRL+I)
; (Ce qui va tout réindenter correctement)
OpenWindow(#Win, 0, 0, 300, 100, "Horloge", 
           #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

; Créer une zone de texte (le texte sera centré horizontalement)
TextGadget(#Txt, 100, 40, 90, 20, "Hello World!", #PB_Text_Center)

; Ajouter un timer (délai en milliseconde)
; Un timer est toujours lié à une fenêtre!
AddWindowTimer(#Win, #Timer, 1000)



; --- Procédures appelées par les déclencheurs
Procedure Quit()
     End
EndProcedure

Procedure Update_Clock()
     SetGadgetText(#Txt, FormatDate("%hh:%ii:%ss", Date()))
EndProcedure

; --- Déclencheurs
BindEvent(#PB_Event_CloseWindow,   @Quit())
BindEvent(#PB_Event_Timer,         @Update_Clock())   
; Avantages: 
; - Les appels se font à tout moment
; - Plus rapide (effet visible sur le redimensionnement de fenêtres avec gadgets)
; - Un gadget système peut être appelé avec uniquement la fenêtre concernée 
;   (utile pour la Case de fermeture, si on utilise plusieurs fenêtres)
; voir aussi:
; - BindGadgetEvent()
; - BindMenuEvent()

; --- Boucle principale (c'est tout :-)
Repeat 
     WaitWindowEvent()
ForEver
Notes:
1. On peut mélanger les deux techniques
2. La méthode Bind... permet aussi de désactiver un évènement (avec UnBind... )

:wink:
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: Pour YOGI

Message par Zorro »

et par l'utilisation de l'Api windows ;)

Code : Tout sélectionner

; S'obliger à déclarer les variables
; (évite les les erreurs par bêtes fautes de frppae ;-)
EnableExplicit
; Laisser PB affecter des numéros aux objets
; On est ainsi sûr de ne pas utiliser le même numéro par erreur
Enumeration
		#Win
		#Txt
		#Timer_1
EndEnumeration
Declare timerproc(hwnd.l, umsg.l, idevent.l, dwtime.l)

OpenWindow(#Win, 0, 0, 300, 100, "Horloge", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
; Créer une zone de texte (le texte sera centré horizontalement)
TextGadget(#Txt, 100, 40, 90, 20, "Hello World!", #PB_Text_Center)
; Ajouter un timer (délai en milliseconde)
SetTimer_(WindowID(#Win), #timer_1, 1000, @TimerProc()) ; defnition du timer , toutes les 1 secondes, on appel la procedure  TimerProc()
Repeat
		Select WaitWindowEvent()
		Case #PB_Event_CloseWindow
				; L'utilisateur a cliqué sur la case de fermeture de la fenêtre
				; Quitter la boucle principale
				Break
				; On aurait pu aussi mettre directement End
				; Mais on peut parfois avoir des choses à faire
				; avant de quitter complètement un programme (sauvegarde)
		EndSelect
ForEver
;Zone procedure

; cette procedure contient les actions a effectuer par le timer
Procedure TimerProc(hwnd.l, uMsg.l, idEvent.l, dwTime.l)
		Select uMsg
		Case #WM_TIMER
				Select idEvent
				Case  #timer_1 ; se qui se passe lors de l'appel du timer
						SetGadgetText(#Txt, FormatDate("%hh:%ii:%ss", Date())) ; on affiche l'heure
				EndSelect
		EndSelect
EndProcedure

End 

Avatar de l’utilisateur
yogi
Messages : 90
Inscription : sam. 06/août/2016 15:55
Localisation : dijon
Contact :

Re: Pour YOGI

Message par yogi »

bonjour messieurs :)

déjà grand merci pour le code ! alors mission d'aujourd'hui, comprendre tout cela :)
je vais y aller à taton, essayer de gérer un effet déjà donné et y mettre un timer mais peut être que je vois trop grand
en lua je définie l'effet et l'appelle dans le timer, j'ai l'impression que c'est la même chose ?
à moi de comprendre tout cela

merci

stéphane
hop ici grosse tour a moué: pentium G3258 à 3.20ghz + 16go de ram + 650gtx
sinon laptop bout de plastique 2 x centrino 1.8 ghz + 4 go de ram
Le tout sous Deepin OS 64b le bonheur :) et plein de virtualbox :)
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: Pour YOGI

Message par Zorro »

yogi a écrit : en lua je définie l'effet et l'appelle dans le timer, j'ai l'impression que c'est la même chose ?

stéphane
oui c'est pareille !!

en Visual Basic , par exemple , tu as l'objet timer, et dedans tu pose le code a effectuer
ben la c'est pareil !

tu definie un timer (

Code : Tout sélectionner

 AddWindowTimer(#Win, #Timer, 1000)
)
(reviens a poser l'objet timer dans ta fenetre )
cette fonction donne un numero au timer (#timer ) , et une valeur de temp (1000 = 1 seconde )

ensuite dans la boucle d'event (la boucle principale qui tourne en permanence )

tu as :

Code : Tout sélectionner

Case #PB_Event_Timer
               ; Un évènement de type timer s'est déclenché
               If EventTimer() = #Timer
cela signifie que si un evenement de timer se presente , ce qui arrive chaque seconde , dans le code d'exemple )
on verifie de quel timer il s'agit , ici le timer numero #timer , (car on peut avoir plusieurs timer dans une fenetre)

si c'est le cas , on execute

Code : Tout sélectionner

  SetGadgetText(#Txt, FormatDate("%hh:%ii:%ss", Date()))
fin de l'histoire :)
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: Pour YOGI

Message par Zorro »

exemple d'utilisation du timer , comme gachette
dans le cadre d'un jeux video

ici on ne s'occupe que d'une balle qui part de bas de l'ecran, vers le haut

chaque seconde , un balle partira du bas de l'ecran , ce depart est conditionné par
l'emploi d'un timer !!

c'est l'emploi d'une variable "Drapeaux" (Flag)

Code : Tout sélectionner

 gachette.b
qui determine si on doit faire partir la balle
et cette variable sert de "gachette" , elle est mise a 1 par le timer , une fois le tir effectué, on la remet a 0

je te laisse regarder le code :

Code : Tout sélectionner


Enumeration
	#Window
	#timer    
	#ball
EndEnumeration

Structure ball
	x.l
	y.l
	sensy.l
EndStructure
Declare  SetResolution(RezX, RezY, NbCoul, Frequence, Memoriser) ; si SetResolution=2 la résolution est identique à l'actuelle, si 1 erreur lors de la recherche des infos, sinon regarder #DISP_CHANG_...




ExamineDesktops()
global x_ecran1=DesktopWidth(0) ; on note la resolution actuelle
global  y_ecran1=DesktopHeight(0) ; on note la resolution actuelle

SetResolution(800,600,32,60,1)  ; on force la resolution en 800x600 
ExamineDesktops()
global x_ecran=DesktopWidth(0) ; recupe la resolution changé pour le jeux
global y_ecran=DesktopHeight(0); recupe la resolution changé pour le jeux

Dim ball.ball(1)
ball(1)\x =x_ecran/2
ball(1)\y=y_ecran
ball(1)\sensy.l=-32 ; sens de deplacement de la balle ( monte )
Global gachette.b,compteur_de_tir


InitSprite():InitKeyboard()




If OpenWindow(#Window, 0, 0, x_ecran, y_ecran,"", #PB_Window_BorderLess     )
	OpenWindowedScreen(WindowID(#Window),0,0,x_ecran, y_ecran,1,0,0)
	StickyWindow(#window,1)
	; ********** creation du sprite ********************
	CreateSprite(#ball,32,32)
	StartDrawing(SpriteOutput(#ball))
		Circle(16,16,16,RGB(255,255,0))
	StopDrawing()
	; **********************************************
	AddWindowTimer(#Window, #timer, 1000)
	SetFrameRate(60)
	
	; *********** boucle principale ******************************************
	Repeat
		
		ExamineKeyboard()
		If compteur_de_tir>50
			beep_(440,100)
			gachette.b=0 ; on a arreté le tir parceque le compteur est superieur a 10
			; mais le timer tourne toujours ..... ;o)
		EndIf
		
		If gachette.b=1   ; le timer a declenché la gachette          
			ball(1)\y=ball(1)\y+ball(1)\sensy.l
			If  ball(1)\y<0
				ball(1)\y=y_ecran
				gachette.b=0 ; la balle est arrivé en haut on la remet a sa place, et la gachette reviens a sa place
			EndIf
			Else
			ball(1)\y=y_ecran
			gachette.b=0 ; on remet la gachette a zero pour le prochain timer  
		EndIf
		
		; ******************* les events *****************************************
		
		select waitWindowEvent(2)  ; le 20 permet de rendre la main au system , sinon il faut creer un evenement pour faire bouger la balle ( en bougeant la souris par ex )
			case #PB_Event_Timer  ; un evenement timer a lieu
			if  EventTimer() = #timer; il s'agit de notre timer (on peut bien sur en avoir plusieurs )
				;Debug "--------------------1 seconde"
				; Ici, le code à executer toutes les secondes
				compteur_de_tir=compteur_de_tir+1 ; on incrmente le nombre de tir , pour pouvoir l'arreter
				gachette.b=1
			endif
		EndSelect
		
		;  CallDebugger
		DisplaySprite(#ball,ball(1)\x,ball(1)\y)
		FlipBuffers()
		ClearScreen(RGB(0,0,0))
		
	Until KeyboardPushed(#PB_Key_Escape) Or Event=#PB_Event_CloseWindow
	; **********************************************************************
EndIf
SetResolution(x_ecran1,y_ecran1,32,60,1)  ; on remet la resolution du debut !!



Procedure SetResolution(RezX, RezY, NbCoul, Frequence, Memoriser)
 ; si SetResolution=2 la résolution est identique à l'actuelle, si 1 erreur lors de la recherche des infos, sinon regarder #DISP_CHANG_...	
	dm.DEVMODE
	If EnumDisplaySettings_ (0, -1, @dm)
		If RezX = dm\dmPelsWidth And RezY = dm\dmPelsHeight And NbCoul = dm\dmBitsPerPel And Frequence=dm\dmDisplayFrequency : ProcedureReturn 2 : EndIf
		dmEcran.DEVMODE
		dmEcran\dmSize = SizeOf (dmEcran)
		dmEcran\dmFields = #DM_PELSWIDTH|#DM_PELSHEIGHT|#DM_BITSPERPEL|#DM_DISPLAYFREQUENCY
		dmEcran\dmPelsWidth = RezX
		dmEcran\dmPelsHeight = RezY
		dmEcran\dmBitsPerPel = NbCoul
		dmEcran\dmDisplayFrequency = Frequence
		If Memoriser=1 : Memoriser= #CDS_UPDATEREGISTRY |  #CDS_NORESET : Else : Memoriser= #CDS_FULLSCREEN : EndIf
		dmx = ChangeDisplaySettings_ (@dmEcran,Memoriser)
		ProcedureReturn dmx
		Else
		ProcedureReturn 1
	EndIf
EndProcedure

; EPB


perso, j'aime bien la version API windows

elle est plus clair a lire , je trouve

ici un dernier exemple , qui prends en compte 3 timer ensemble

Code : Tout sélectionner

Declare TimerProc(hwnd.l, uMsg.l, idEvent.l, dwTime.l)

Enumeration
		#timer_1
		#timer_2
		#timer_3
EndEnumeration

If OpenWindow(0, 100, 100, 100, 100,"", #PB_Window_SystemMenu|#PB_Window_SizeGadget)
		Handle = WindowID(0)
		
		SetTimer_(Handle, #timer_1, 1000, @TimerProc()) ; envoie un evenement toutes les 1000 millisecondes ; en fait on prepare un timer qui enverra cette evenement
		SetTimer_(Handle, #timer_2, 100, @TimerProc())  ; envoie un evenement toutes les 200 millisecondes ; en fait on prepare un timer qui enverra cette evenement
		SetTimer_(Handle, #timer_3, 3000, @TimerProc())  ; envoie un evenement toutes les 3000 millisecondes ; en fait on prepare un timer qui enverra cette evenement
		
		Repeat
		Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf 



; cette procedure contient les actions a effectuer des  3 timers
Procedure TimerProc(hwnd.l, uMsg.l, idEvent.l, dwTime.l)
		Select uMsg
		Case #WM_TIMER
				Select idEvent
				Case  #timer_1
						Debug "le timer---------------1 seconde"
						; Ici, le code à executer toutes les secondes
						beep_(440,100)
				Case  #timer_2
						Debug "le timer  0.1 secondes"
						; Ici, le code à executer toutes les 200 millisecondes
				Case #timer_3
						Debug "le timer ------------------------------------3 secondes"
						beep_(880,100)
						; Ici, le code à executer toutes les 3 secondes
				EndSelect
		EndSelect
EndProcedure

; EPB 

Marc56
Messages : 2196
Inscription : sam. 08/févr./2014 15:19

Re: Pour YOGI

Message par Marc56 »

Zorro a écrit : perso, j'aime bien la version API windows
elle est plus clair a lire , je trouve
Aie, aie aie, directement les API 8O
Tu veux nous le dégouter de PB à vie, notre Yogi ? :D
Déjà qu'il remet à demain voir à 2 mois chaque démarrage :P

Ça:

Code : Tout sélectionner

Procedure SetResolution(RezX, RezY, NbCoul, Frequence, Memoriser)
     ; si SetResolution=2 la résolution est identique à l'actuelle, si 1 erreur lors de la recherche des infos, sinon regarder #DISP_CHANG_...   
     dm.DEVMODE
     If EnumDisplaySettings_ (0, -1, @dm)
          If RezX = dm\dmPelsWidth And RezY = dm\dmPelsHeight And NbCoul = dm\dmBitsPerPel And Frequence=dm\dmDisplayFrequency : ProcedureReturn 2 : EndIf
          dmEcran.DEVMODE
          dmEcran\dmSize = SizeOf (dmEcran)
          dmEcran\dmFields = #DM_PELSWIDTH|#DM_PELSHEIGHT|#DM_BITSPERPEL|#DM_DISPLAYFREQUENCY
          dmEcran\dmPelsWidth = RezX
          dmEcran\dmPelsHeight = RezY
          dmEcran\dmBitsPerPel = NbCoul
          dmEcran\dmDisplayFrequency = Frequence
          If Memoriser=1 : Memoriser= #CDS_UPDATEREGISTRY |  #CDS_NORESET : Else : Memoriser= #CDS_FULLSCREEN : EndIf
          dmx = ChangeDisplaySettings_ (@dmEcran,Memoriser)
          ProcedureReturn dmx
     Else
          ProcedureReturn 1
     EndIf
EndProcedure
PB le fait directement avec ça:

Code : Tout sélectionner

OpenScreen(800, 600, 32, "")

Code : Tout sélectionner

CloseScreen()
Donc avec les fonctions internes à PB :wink:

Code : Tout sélectionner

Enumeration
     #Window
     #timer   
     #ball
EndEnumeration

Structure ball
     x.l
     y.l
     sensy.l
EndStructure
; 
;Declare  SetResolution(RezX, RezY, NbCoul, Frequence, Memoriser) ; si SetResolution=2 la résolution est identique à l'actuelle, si 1 erreur lors de la recherche des infos, sinon regarder #DISP_CHANG_...

ExamineDesktops()
Global x_ecran1=DesktopWidth(0) ; on note la resolution actuelle
Global  y_ecran1=DesktopHeight(0) ; on note la resolution actuelle

;SetResolution(800,600,32,60,1)  ; on force la resolution en 800x600
; remplacé par OpenScreen(800, 600, 32, "") après InitSprite
ExamineDesktops()
Global x_ecran=DesktopWidth(0) ; recupe la resolution changé pour le jeux
Global y_ecran=DesktopHeight(0); recupe la resolution changé pour le jeux

Dim ball.ball(1)
ball(1)\x =x_ecran/2
ball(1)\y=y_ecran
ball(1)\sensy.l=-32 ; sens de deplacement de la balle ( monte )
Global gachette.b,compteur_de_tir


InitSprite():InitKeyboard()
; hop
OpenScreen(800, 600, 32, "")


If OpenWindow(#Window, 0, 0, x_ecran, y_ecran,"", #PB_Window_BorderLess     )
     OpenWindowedScreen(WindowID(#Window),0,0,x_ecran, y_ecran,1,0,0)
     StickyWindow(#window,1)
     ; ********** creation du sprite ********************
     CreateSprite(#ball,32,32)
     StartDrawing(SpriteOutput(#ball))
     Circle(16,16,16,RGB(255,255,0))
     StopDrawing()
     ; **********************************************
     AddWindowTimer(#Window, #timer, 1000)
     SetFrameRate(60)
     
     ; *********** boucle principale ******************************************
     Repeat
          
          ExamineKeyboard()
          If compteur_de_tir>50
               Beep_(440,100)
               gachette.b=0 ; on a arreté le tir parceque le compteur est superieur a 10
                            ; mais le timer tourne toujours ..... ;o)
          EndIf
          
          If gachette.b=1   ; le timer a declenché la gachette         
               ball(1)\y=ball(1)\y+ball(1)\sensy.l
               If  ball(1)\y<0
                    ball(1)\y=y_ecran
                    gachette.b=0 ; la balle est arrivé en haut on la remet a sa place, et la gachette reviens a sa place
               EndIf
          Else
               ball(1)\y=y_ecran
               gachette.b=0 ; on remet la gachette a zero pour le prochain timer 
          EndIf
          
          ; ******************* les events *****************************************
          
          Select WaitWindowEvent(2)  ; le 20 permet de rendre la main au system , sinon il faut creer un evenement pour faire bouger la balle ( en bougeant la souris par ex )
               Case #PB_Event_Timer  ; un evenement timer a lieu
                    If  EventTimer() = #timer; il s'agit de notre timer (on peut bien sur en avoir plusieurs )
                                             ;Debug "--------------------1 seconde"
                                             ; Ici, le code à executer toutes les secondes
                         compteur_de_tir=compteur_de_tir+1 ; on incrmente le nombre de tir , pour pouvoir l'arreter
                         gachette.b=1
                    EndIf
          EndSelect
          
          ;  CallDebugger
          DisplaySprite(#ball,ball(1)\x,ball(1)\y)
          FlipBuffers()
          ClearScreen(RGB(0,0,0))
          
     Until KeyboardPushed(#PB_Key_Escape) Or Event=#PB_Event_CloseWindow
     ; **********************************************************************
EndIf
; 
;SetResolution(x_ecran1,y_ecran1,32,60,1)  ; on remet la resolution du debut !!
CloseScreen()
Il y a tout ce qu'il faut dans la lib interne Screen pour gérer les modes écran (et surtout c'est valable quelque soit l'OS)

Reste encore Beep_ pour lequel PB n'a toujours pas de fonction interne :|

:wink:
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: Pour YOGI

Message par Zorro »

il est sous Linux, de toutes façons, il n'utilisera pas la version API
mais c'est quand meme bien de la donner cette methode, pour ceux qui viendront plus tard sur ce topic
et qui sont sous Windows
Marc56 a écrit : Il y a tout ce qu'il faut dans la lib interne Screen pour gérer les modes écran (et surtout c'est valable quelque soit l'OS)

Reste encore Beep_ pour lequel PB n'a toujours pas de fonction interne :|

:wink:
[reedit] Text modifié !


la procedure que je donne, n'existe pas en PB !

elle permet de changer la resolution de ton ecran !!
de changer Physiquement la resolution de l'ecran , comme lorsque tu change la resolution en passant par le menu
Windows ou de ta carte graphique !!
pour toute forme de programme (graphique ou pas ! )

dans l'exemple , je passe l'ordi en 800x600 pour la demo de la balle
puis je remet la resolution de depart de ton ordi ,
cette procedure est indispensable pour faire executer un jeux dans une résolution inferieur
a la résolution de travail de ton bureau .... mais c'est vrais que openScreen() fait la meme chose pour un ecran
mais pas pour une application a base de gadget() (canvas, openwindowedScreen ect..)


je tiens a m'excusé d'avoir dit une betise tout a l'heure a propos de openScreen() :oops: :oops:
Dernière modification par Zorro le ven. 28/oct./2016 13:29, modifié 2 fois.
Avatar de l’utilisateur
yogi
Messages : 90
Inscription : sam. 06/août/2016 15:55
Localisation : dijon
Contact :

Re: Pour YOGI

Message par yogi »

bonjour messieurs !

et bien chouette tout cela ! j'attends des news d'un groupe de zik pour un vidéo clip à leur faire en janvier 2017, j'attends des nouvelles d'une amie pour la mise en son d'un court métrage de mon cru et stap zou je vois vos codes :) bref l'après midi pour cela. grand merci donc à tous les deux ! sinon donc faire du fullscreen en 800x600 je vais étudier cela aussi car ça m'intéresse pour mon code mais plus tard, à la finalité

très bon après midi à tous, j'ai à faire pendans deux mois alors ^^

stéphane
hop ici grosse tour a moué: pentium G3258 à 3.20ghz + 16go de ram + 650gtx
sinon laptop bout de plastique 2 x centrino 1.8 ghz + 4 go de ram
Le tout sous Deepin OS 64b le bonheur :) et plein de virtualbox :)
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: Pour YOGI

Message par Zorro »

bon, verification faite

Marc56 tu as raison !

openScreen change la resolution de l'ordi !!!

ben je viens de le decouvrir !! :roll:

il me semble pourtant qu'a une epoque ce n'etait pas le cas ... mon monitor a tube cathodique ne faisait pas CLic-clic
lorsque j'utilisais OpenScreen()

bon , il n'en reste pas moins, que cette fonction (SetResolution() ) permet de changer la résolution de l'ordi
et ça c'est cool :)


me cherchez pas , je suis parti , loin, tres loin ------------> . <---------- la bas ! :roll:
Avatar de l’utilisateur
Micoute
Messages : 2583
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Pour YOGI

Message par Micoute »

Ne vas pas trop loin, tu pourrais te perdre en route !
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Répondre