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
@DJES
C'est vrai, c'est tout bete, mais c'est une bonne idée.
Souvent les plus simples sont les meilleurs

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....

Ecris plutôt LE JAPON ou JAPAN mais pas THE JAPON

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
Ouaih DOBRO, il aurait fait un bon prof !!!!
Il s'ennerve jamais, il est patient
Sauf quand on luit dit qu'elle est bien
SA DOBRO 
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
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
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
Mais tu le met ou ce Win32 pour que ça marche ?
