Page 2 sur 4

Publié : mer. 21/janv./2009 17:17
par Backup
en tout cas chez moi ça c'est clean

Code : Tout sélectionner

; Dessin d'un drapeau Japonais Par Jbernard

;*** On inialise tout  ****
InitSprite()
InitKeyboard()

;definition du rayon du cercle
Rayon = 150
; Couleur du cercle et du cadre
Couleur = (RGB($FF,$0,$0))
;Creation de l'ecran
OpenScreen( 800,600,32," Drapeau Japonais")


;Boucle du programme

Repeat
    ExamineKeyboard()
   
    ;dessine le cercle rouge et du cadre du drapeau
    StartDrawing(ScreenOutput())
        Circle(390,290,Rayon,Couleur)
        DrawingMode(#PB_2DDrawing_Outlined  ) ; force que les dessins se fassent en mode non plein !!
        Box(5,5,790,591,Couleur) ; le box remplace tes lignes ()
    StopDrawing()
    
    FlipBuffers()
      ClearScreen(RGB(255,255,255))
   
Until KeyboardPushed(#PB_Key_Escape)

Publié : jeu. 22/janv./2009 9:45
par djes
En tous cas, je trouve que c'est une super idée cette histoire de drapeau :)

Publié : jeu. 22/janv./2009 11:08
par Kwai chang caine
@DOBRO
Merci pour ton explication plus que détaillée.
Je ne sais pas pourquoi, j'avais dans l'idée que l'image restait tant que on la changeait pas, c'est idiot :oops:

@DJES
C'est vrai, c'est tout bete, mais c'est une bonne idée.
Souvent les plus simples sont les meilleurs :D

Publié : jeu. 22/janv./2009 15:11
par jbernard13
j'ai crée ces 2 drapeaux dans le but d'apprendre a dessiné en 2d avec pb

Publié : jeu. 22/janv./2009 15:44
par djes
jbernard13 a écrit :j'ai crée ces 2 drapeaux dans le but d'apprendre a dessiné en 2d avec pb
Oui et tu as bien réussi. Le top serait une procédure qu'on appellerait en spécifiant le pays (par exemple drapeau("FR", 0, 0, 640, 480) ) et qui dessinerait le drapeau à la taille et à l'emplacement spécifié dans le contexte courant.

Publié : ven. 23/janv./2009 21:17
par jbernard13
bonsoir
j'ai rajouter ceci ( merci à dobro)

Code : Tout sélectionner


** ScrollText , par Jbernard** 
#sprite_text=1 
; On iniallise tout 
InitSprite() 
InitKeyboard() 
; Creation de l'ecran 
largeur_ecran=GetSystemMetrics_(#SM_CXSCREEN):; largeur de l'ecran 
hauteur_ecran=GetSystemMetrics_(#SM_CYSCREEN) ; hauteur de l'ecran    
OpenScreen(largeur_ecran,hauteur_ecran,32,"Scrolltext") 
    

; on charge la police d'ecriture et on crée un sprite 
LoadFont(1,"impact", 50) 
CreateSprite(#sprite_text,250+largeur_ecran,60) 


; on dessine et affiche le texte 
text$="Le drapeau du  JAPON " 
StartDrawing(SpriteOutput(#sprite_text)) 
  DrawingMode(#PB_2DDrawing_Transparent) 
  DrawingFont(FontID(1)) 
  DrawText(0,0-14,text$,RGB($FF,$0,$0)) 
  Longueur_text = TextWidth(text$) 
StopDrawing() 

; Boucle du programme 

Repeat 
  
  ClearScreen(0) 
  ; animation du texte 
  x=x-3
  If x<0-Longueur_text 
    x=largeur_ecran 
  EndIf 
  y=hauteur_ecran -100
StartDrawing(ScreenOutput())
  Box(250,50,1000,700,RGB($FF,$FF,$FF))
  Circle(735,400,190,RGB($FF,$0,$0))
  StopDrawing()


   DisplaySprite(#sprite_text,x,y)    
  FlipBuffers() 
  ExamineKeyboard() 
  
Until KeyboardPushed(#PB_Key_Escape) 

Publié : ven. 23/janv./2009 22:16
par Ar-S
Et bien ton code JB ne clip pas cette fois !
Par contre THE JAPON.... :D
Ecris plutôt LE JAPON ou JAPAN mais pas THE JAPON :P :P :P

Publié : sam. 24/janv./2009 8:14
par Backup
n'hésite pas a bien séparer ton code par étape comme dans l'exemple ci dessous , et de créer un sprite par élément affiché !!

c'est mieux d'utiliser des sprites pour afficher des objets qui bougent a l'écran
plutôt que de les faires bouger directement dans l'écran sans prédessin !!

la tu pré dessine tes objets , et tu n'a plus qu'a les faire afficher avec un simple displaysprite() :)


Code : Tout sélectionner


;
#sprite_text=1
#sprite_drapeau=2
; On iniallise tout
InitSprite()
InitKeyboard()
; Creation de l'ecran
largeur_ecran=GetSystemMetrics_(#SM_CXSCREEN):; largeur de l'ecran
hauteur_ecran=GetSystemMetrics_(#SM_CYSCREEN) ; hauteur de l'ecran   
OpenScreen(largeur_ecran,hauteur_ecran,32,"Scrolltext")
   

; on charge la police d'ecriture et on crée un sprite
LoadFont(1,"impact", 50)



; ********* on cree le sprite qui contient le drapeau ********************
CreateSprite(#sprite_drapeau,largeur_ecran,hauteur_ecran)
StartDrawing(SpriteOutput(#sprite_drapeau))
	Box(0,0,largeur_ecran,hauteur_ecran,RGB($FF,$FF,$FF)) ; notre fond de drapeau prend tout l'ecran
	Circle(largeur_ecran/2,hauteur_ecran/2,190,RGB($FF,$0,$0)) ; ici le cercle est dessiné au millieu de l'ecran
StopDrawing()  ;                                                                                grace a largeur_ecran/2 et hauteur_ecran/2
; *****************************************************************


; ******************** on cree le sprite qui contien le text ***************
CreateSprite(#sprite_text,largeur_ecran,60)
text$="Le drapeau du  JAPON "
StartDrawing(SpriteOutput(#sprite_text))
	DrawingMode(#PB_2DDrawing_Transparent)
	DrawingFont(FontID(1))
	DrawText(0,0-14,text$,RGB($FF,$0,$0))
	Longueur_text = TextWidth(text$)
StopDrawing()

; *********************************************************************


; **** apres ces créations préalable , on peut attaquer l'affichage proprement dit
; Boucle du programme

Repeat
	
	
	; ******* animation du texte *********
	x=x-3
	If x<0-Longueur_text
		x=largeur_ecran
	EndIf
	y=hauteur_ecran -100
	; ********************************
	
	DisplaySprite(#sprite_drapeau,0,0) ; on affiche d'abord le drapeau pour qu'il reste derriere   
	DisplayTransparentSprite(#sprite_text,x,y)   ; puis par dessus on affiche le text en transparent !!
	
	FlipBuffers()
	ClearScreen(0) ; perso je nettoie l'ecran toujour a la fin !!
	ExamineKeyboard()
	
Until KeyboardPushed(#PB_Key_Escape) 
 

Publié : sam. 24/janv./2009 8:30
par jbernard13
merci dobro pour tes cours

Publié : sam. 24/janv./2009 8:32
par Kwai chang caine
merci dobro pour tes cours
Oui merci pour prendre le temps de bien commenter tes codes 8)

Ouaih DOBRO, il aurait fait un bon prof !!!! 8)
Il s'ennerve jamais, il est patient 8)

Sauf quand on luit dit qu'elle est bien SA DOBRO :oops:

Publié : sam. 24/janv./2009 10:10
par jbernard13
juste une question

GetSystemMetrics , c'est un api? parceque j'ai rien dans la doc de pb sur cette commande
et #SM_CXSCREEN est ce que c'est une constante que tu as crée dobro ou bien c'est une constante api ...

Publié : sam. 24/janv./2009 11:05
par Kwai chang caine
Quand il y a un un underscore derriere une fonction, y'a de fortes chances que ce soit une api :D

Alors ce que je fais, j'ai installé le logiciel "API-Guide" tu doit connaitre et grace à ça tu tape dans la recherche "GetSystemMetrics"
et tu obtiens ça, qui confirme que tu as raison :wink:

Code : Tout sélectionner

Declare Function GetSystemMetrics Lib "user32" Alias "" (ByVal nIndex As Long) As Long

Publié : sam. 24/janv./2009 11:30
par Ar-S
Cela fait plusieur fois que je croise les API

GetSystemMetrics_(#SM_CXSCREEN) dans des codes, Il est natif à Windows alors que DesktopWidth(0) qui est natif a PB. Est-il moins rapide ?

Publié : sam. 24/janv./2009 11:31
par Backup
oui ! effectivement :)

TOUTES les fonctions qui ont leur nom qui finis par "_(" sont des API windows

et donc les constante employées sont forcement en rapport avec l'Api :)

il faut allez sur le site de microsoft, ou bien avoir certains prg
ou bien le fichier d'aide "WIN32" qui permet ensuite d'avoir l'info comme avec l'aide de purebasic en appuyant sur F1 lorsque le curseur est sur l'API

seule probleme ce fichier d'aide n'est pas complet .. :)

Publié : sam. 24/janv./2009 11:34
par Kwai chang caine
ou bien le fichier d'aide "WIN32" qui permet ensuite d'avoir l'info comme avec l'aide de purebasic en appuyant sur F1 lorsque le curseur est sur l'API
Cool la combine 8O
Mais tu le met ou ce Win32 pour que ça marche ? :roll: