PURE BASIC - Le Topic officiel
+8
grostonton
Urbinou
ShiningBZH
Tryphon
goux.m
jmg49
Capitaine
Shaoth
12 participants
Page 6 sur 12
Page 6 sur 12 • 1, 2, 3 ... 5, 6, 7 ... 10, 11, 12
Re: PURE BASIC - Le Topic officiel
Tu n'avais pas (dé)coché des trucs dans les paramètres concernant le rescale ?
Re: PURE BASIC - Le Topic officiel
drfloyd a écrit:en dernier recours oui, mais comme c'est juste pour afficher du texte banal, sans effet....
Tu t'en fous des effets. Tu sais, dans les jeux console, c'est comme ça qu'on fait, quel que soit le texte. Sur MD t'as même pas de police préchargée...
Tryphon- Docteur *
- Nombre de messages : 26166
Age : 47
Localisation : Un peu plus à l'Ouest
Date d'inscription : 23/07/2016
Re: PURE BASIC - Le Topic officiel
Bah oui, mais là c'est sur pc, et c'est un truc de base qui devrait fonctionner, je peux comprendre qu'il veuille savoir pourquoi : )
Re: PURE BASIC - Le Topic officiel
Après il suffit de pas zoomer mon ecran à 125%... mais bon sachant que ca bug si je le fais, ça me perturbe grave, ça compromet l'équilibre dans l'univers
_______________________________________________________
Re: PURE BASIC - Le Topic officiel
Ce n'est pas toi le problème, mais le public potentiel qui ne va pas changer le zoom de son bureau pour jouer à ton jeu.
Même si perso sur mon portable (17" full hd), j'ai troqué mon 115% contre une paire de lunettes de lecture
Même si perso sur mon portable (17" full hd), j'ai troqué mon 115% contre une paire de lunettes de lecture
Re: PURE BASIC - Le Topic officiel
bon en mode fenetre (non screen pour le moment)
ceci fonctionne (code donné sur le Forum Purebasic )
je viens de tester en 100% et 125% le rendu est le meme
ne pas oublier de cocher dans les options du compilateur la case DPI....
je vais tester en mode graphique ....
laisse moi un peut de temps, je risque d'etre interompu ....
ceci fonctionne (code donné sur le Forum Purebasic )
je viens de tester en 100% et 125% le rendu est le meme
ne pas oublier de cocher dans les options du compilateur la case DPI....
- Code:
Enumeration
#Ma_fen
#TXT
EndEnumeration
ExamineDesktops()
EcranX=DesktopWidth(0)
Ecrany =DesktopHeight(0)
Global KDPIX.d = 100/DesktopScaledX(100):Global KDPIY.d = 100/DesktopScaledY(100)
Global Ldef.d = 1920 * KDPIX.d :Global Hdef.d = 1080 * KDPIY.d
Global definecrht.d = EcranY * KDPIY
Global definecrlarg.d = Ecranx * KDPIX
Procedure X(lg.d)
ProcedureReturn lg *(definecrlarg.d/Ldef.d)
EndProcedure
Procedure y(h.d)
ProcedureReturn h *(definecrht.d /Hdef.d)
EndProcedure
FontID1 = LoadFont(30,"Tahoma",X(12))
OpenWindow( #Ma_fen,X(600),Y(200),X(400),Y(300),"Ma Fenêtre",#PB_Window_MinimizeGadget)
TextGadget(#TXT,X(2),Y(100),X(396),Y(25),"Enfin la résolution. C'est une révolution",#PB_Text_Center)
SetGadgetFont(#TXT,FontID1)
SetGadgetColor(#TXT,#PB_Gadget_BackColor,$1E69D2)
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
End
je vais tester en mode graphique ....
laisse moi un peut de temps, je risque d'etre interompu ....
Dernière édition par Dobro le Mar 8 Oct 2019 - 19:50, édité 1 fois
Dobro- Patient contaminé
- Nombre de messages : 293
Age : 59
Localisation : 43
Date d'inscription : 30/09/2019
Re: PURE BASIC - Le Topic officiel
voila , je pense que ton probleme n'as rien a voir avec les DPI
mais c'est simplement lié au Facteur Zoom du Windowed Screen ...
voici un petit code de test ,
tu vas redimenssionner la fenetre , et me dire si le probleme que tu rencontres concerne
comme pour cette exemple , le fait que la fonte suit la taille de la fenetre ??
et que toi tu voudrai que la fonte reste toujours a la meme taille quelque soit la taille de ta fenetre ! ??
si c'est ça, c'est simple a resoudre :)
mais c'est simplement lié au Facteur Zoom du Windowed Screen ...
voici un petit code de test ,
tu vas redimenssionner la fenetre , et me dire si le probleme que tu rencontres concerne
comme pour cette exemple , le fait que la fonte suit la taille de la fenetre ??
et que toi tu voudrai que la fonte reste toujours a la meme taille quelque soit la taille de ta fenetre ! ??
si c'est ça, c'est simple a resoudre :)
- Code:
Enumeration
#font
#win
#bouton
#sprite1
EndEnumeration
If InitSprite() = 0
MessageRequester("Erreur", "Impossible d'ouvrir l'écran & l'environnement nécessaire aux sprites !", 0)
End
EndIf
If LoadFont(#font,"Comic sans Ms",14,#BOLD_FONTTYPE)
Else
MessageRequester("erreur" ,"fonte pas chargée")
EndIf
If OpenWindow(#win, 0, 0, 220, 160, "Un écran dans une fenêtre...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered| #PB_Window_SizeGadget )
ButtonGadget(#bouton, 170, 135, 45, 20, "Quitter")
redimenssionnement_auto=#True
If OpenWindowedScreen(WindowID(#win), 0, 0, 160, 160,redimenssionnement_auto,1,1,1)
CreateSprite(#sprite1, 20, 20)
If StartDrawing(SpriteOutput(#sprite1))
Box(0, 0, 20, 20, RGB(255, 0, 155))
Box(5, 5, 10, 10, RGB(155, 0, 255))
StopDrawing() ;>
EndIf;|
Else
MessageRequester("Erreur", "Impossible d'ouvrir un écran dans la fenêtre!", 0)
End ;|
EndIf
Endif
direction = 2
Repeat
; Il est très important de traiter tous les évènements restants dans la file d'attente à chaque tour
;
Repeat
Event = WindowEvent()
Select Event
Case #PB_Event_SizeWindow ; en cas de redimenssionnement de la fenetre
; debug "ok"
; on colle le gadget bouton en bas a gauche
rez_x=WindowWidth(#win)-5 ; on recup la resolution de la fenetre
rez_y=WindowHeight(#win)-5 ; -5 pour laisser une petit espace entre le bouton et le bord fenetre
larg_x=GadgetWidth(#bouton) ; recup la taille du bouton largeur et hauteur
haut_y=GadgetHeight(#bouton)
; on deplace le bouton pour qu'il soit en bonne position
ResizeGadget(#bouton, rez_x-larg_x, rez_y-haut_y, #pb_ignore, #Pb_ignore)
Case #PB_Event_Gadget
If EventGadget() = #bouton
End
EndIf
Case #PB_Event_CloseWindow
End
EndSelect
Until Event = 0
FlipBuffers()
ClearScreen(RGB(0, 0, 0))
StartDrawing(ScreenOutput())
DrawingFont(Fontid(#font))
DrawText( 10,10,"Purebasic Power",RGB(255,255,0))
StopDrawing()
DisplaySprite(#Sprite1, x, x) ; le x,x c'est fait expres ;o)
x + direction
If x > 140 : direction = -2 : EndIf
If x < 0 : direction = 2 : EndIf
Delay(1)
ForEver
; Epb
Dobro- Patient contaminé
- Nombre de messages : 293
Age : 59
Localisation : 43
Date d'inscription : 30/09/2019
Re: PURE BASIC - Le Topic officiel
Merci Professeur Dobro, je vais tester ça ce soir si je peux. C'est cool de vous avoir ici (en complément du Professeur Tryphon, notre spécialiste MO6)
Je vous intégre d'office dans les crédits de COSMOS II, ainsi qu'en personnage dans le jeu, pour l'aide apportée, c'est un minimum.
Pour les royalties, on verra en fonction du succès mondial ou pas
Je vous intégre d'office dans les crédits de COSMOS II, ainsi qu'en personnage dans le jeu, pour l'aide apportée, c'est un minimum.
Pour les royalties, on verra en fonction du succès mondial ou pas
_______________________________________________________
Re: PURE BASIC - Le Topic officiel
Dobro, ton programme exemple a le meme probleme que mon jeu
En mode windows 125% le texte n'est plus proportionnel, j'ai fait une capture ecran :
La fonte suit la taille de la fenetre, pas de soucis (et heureusement) , mais tu vois que POWER BASIC POWER deborde et ne tient plus dans la fenetre.
Idem pour le 1er code test, la police est surmentionnée quand je passe en 125%
Voilà mon probleme depuis le début
En mode windows 125% le texte n'est plus proportionnel, j'ai fait une capture ecran :
La fonte suit la taille de la fenetre, pas de soucis (et heureusement) , mais tu vois que POWER BASIC POWER deborde et ne tient plus dans la fenetre.
Idem pour le 1er code test, la police est surmentionnée quand je passe en 125%
Voilà mon probleme depuis le début
_______________________________________________________
Re: PURE BASIC - Le Topic officiel
Sinon pour info fais gaffe, il y a une loi qui interdit l’usage de la comics sans ms
Re: PURE BASIC - Le Topic officiel
bon apres reflexion
je me rends compte qu'il me manque des infos
le system d'exploitation de l'ordi qui deconne (qui a un affichage qui deconne)
la carte Graphique ?
la resolution employé (celle du bureau )
(j'attends ces reponses Merci )
pour ce qui concerne le premier code
ça ne devrai pas deconner , j'ai testé chez moi avec Nvidia a jour et Windows10 a jours
en 100% et 125% , pas de soucis (je suis aussi en permanence a 125% )
des membres du forum Purebasci on aussi testé le premier code, sans avoir de soucis
je pencherai donc pour un probleme lié a
1-- une version de windows ancienne (win 98 ,win 7 ?? )
2-- a un probleme de mise a jour de driver de ta carte Graphique , de DirectX ??
quelle version de DirectX ??
enfin , il y aura toujours une solution ... un peut plus lourde
mais ce qui semble évident c'est que l'ordinateur en question EST une exception
alors, je pose la question , est-ce que ça vaut le coup de se tordre l'esprit
pour UN ordinateur ???... jusqu'a preuve du contraire, j'ai pas vu d'autres personnes se plaindre ....
donc je met clairement en cause TON ordinateur
que ce soit un probleme de mise a jour, ne me surprendrai pas plus que ça
apres, il faut vraiment essayer de comprendre, ou se trouve le probleme
je doute fortement qu'il vienne de Purebasic
considerant que non seulement le Forum Français a testé la chose depuis longtemps
mais aussi le Forum Anglais (qui lui contient bien plus de membres (US,GB,Deuch,Russe) , membres qui bossent sur Purebasic, et ce probleme n'as jamais été rapporté ..... ou alors provenait d'un probleme que je soulève (mise a jour systeme , obsolescence etc...)
mais avant de dire que c'est mort,et que Purebasic c'est de la M** LOL, verifie s'il te plait ton systeme completement
mise a jour Windows <--- quel version ?
mise a jour Driver Carte Graph <--- quelle carte , quel numero de Driver ?
pour info ,j'ai
2 MSI "Gamer" FullHD mais avec un seven et un Win10
1 Asus sur seven Pro
pas de problemes !
je me rends compte qu'il me manque des infos
le system d'exploitation de l'ordi qui deconne (qui a un affichage qui deconne)
la carte Graphique ?
la resolution employé (celle du bureau )
(j'attends ces reponses Merci )
pour ce qui concerne le premier code
ça ne devrai pas deconner , j'ai testé chez moi avec Nvidia a jour et Windows10 a jours
en 100% et 125% , pas de soucis (je suis aussi en permanence a 125% )
des membres du forum Purebasci on aussi testé le premier code, sans avoir de soucis
je pencherai donc pour un probleme lié a
1-- une version de windows ancienne (win 98 ,win 7 ?? )
2-- a un probleme de mise a jour de driver de ta carte Graphique , de DirectX ??
quelle version de DirectX ??
enfin , il y aura toujours une solution ... un peut plus lourde
mais ce qui semble évident c'est que l'ordinateur en question EST une exception
alors, je pose la question , est-ce que ça vaut le coup de se tordre l'esprit
pour UN ordinateur ???... jusqu'a preuve du contraire, j'ai pas vu d'autres personnes se plaindre ....
donc je met clairement en cause TON ordinateur
que ce soit un probleme de mise a jour, ne me surprendrai pas plus que ça
apres, il faut vraiment essayer de comprendre, ou se trouve le probleme
je doute fortement qu'il vienne de Purebasic
considerant que non seulement le Forum Français a testé la chose depuis longtemps
mais aussi le Forum Anglais (qui lui contient bien plus de membres (US,GB,Deuch,Russe) , membres qui bossent sur Purebasic, et ce probleme n'as jamais été rapporté ..... ou alors provenait d'un probleme que je soulève (mise a jour systeme , obsolescence etc...)
mais avant de dire que c'est mort,et que Purebasic c'est de la M** LOL, verifie s'il te plait ton systeme completement
mise a jour Windows <--- quel version ?
mise a jour Driver Carte Graph <--- quelle carte , quel numero de Driver ?
pour info ,j'ai
2 MSI "Gamer" FullHD mais avec un seven et un Win10
1 Asus sur seven Pro
pas de problemes !
Dobro- Patient contaminé
- Nombre de messages : 293
Age : 59
Localisation : 43
Date d'inscription : 30/09/2019
Re: PURE BASIC - Le Topic officiel
bon , voici une solution
le principe consiste a ecrire non pas le text directement sur la surface DirectX (le screen)
mais a ecrire notre text sur une image (cela aurai pu etre aussi un Sprite )
en principe tout les ordinateurs sous windows devraient pouvoir afficher une image au coordonées x,y , au meme endroit , mais je ne suis pas a l’abri de surprises éventuelles
donc ici j'ai crée 2 procedures, que je vais me servir comme de nouvelles fonctions...
CreateLineText(win,num,txt.s,coul)
qui sert a creer notre image avec le nouveau text ...
win=numero de la fenetre
num= numero du sprite qui va recevoir le text , considere le comme le numero de la ligne
txts.s = le text qu'n veux afficher
coul = la couleur du text
----------------------------------------------------
enfin la procedure qui permet l'affichage a l'ecran
WriteLineText(num,x,y,larg,haut)
num= numero de la ligne ( numero de l'image )
x,y = la coordonée ou afficher la ligne (permet une animation eventuelle )
comme je me sert de la taille de la fenetre pour creer l'image , en principe
ça devrai rentrer entierement
note qu'en Purebasic, on a l'habitude de bidouiller pour avoir des résultats
c'est pas exceptionnel de devoir se reecrire des fonctions pour obtenir un resultat
le langage est fait pour ça !!
c'est pour ça que bien souvent on fait directement appel aux APIs du systeme...
voici le code a tester (on peut redimensionner la fenetre et voir le résultat )
j'ajoute que bien souvent, on se creer des bibliotheques de fonctions (de procedures)
qu'on peut appeler a la volée de plusieurs façons
soit on se creer un fichier "*.pbi" qui contient la collections de procedures, ce qui forme notre bibliotheque de fonctions
puis dans notre code on importe le fichier pour invoquer l'une des procedures qui nous intéresse
ou bien on peut aussi se faire une collections de "Modules" , qui sont une forme d'écriture de bibliothèque de fonctions
ça reviens quasi au meme que le systeme a base de PBI (avec import )
ou bien , on peut aussi se creer une "librairie"
il faut un utilitaire spécial pour ça , qui va creer un fichier Lib qu'on pose dans le dossier "UserLibrary" de purebasic
ainsi nos fonctions seront directement utilisables comme les autres fonctions du Purebasic !!
cela nous permet d'étendre le langage avec nos propres noms de fonctions , sans avoir a faire d'import ...
mais ce dernier point demande quand meme de connaitre Purebasic ..(pas reservé aux débutants ) ...
l’inconvénient c'est qu'une librairie ainsi faite, ne peux pas etre modifié !!
si Purebasic change de version , il faut recompiler la lib a la nouvelle version (pas toujours mais souvent .. )
ce qui peut occasionner des problemes de compatibilité par la suite ....
l'avantage on est proprietaire de notre librairie ... il n'y a a que celui qui a les sources, qui peut la modifier...
note quand meme , que le probleme que tu rencontres, est exceptionnel , et semble ne toucher QUE ton ordi ....
le principe consiste a ecrire non pas le text directement sur la surface DirectX (le screen)
mais a ecrire notre text sur une image (cela aurai pu etre aussi un Sprite )
en principe tout les ordinateurs sous windows devraient pouvoir afficher une image au coordonées x,y , au meme endroit , mais je ne suis pas a l’abri de surprises éventuelles
donc ici j'ai crée 2 procedures, que je vais me servir comme de nouvelles fonctions...
CreateLineText(win,num,txt.s,coul)
qui sert a creer notre image avec le nouveau text ...
win=numero de la fenetre
num= numero du sprite qui va recevoir le text , considere le comme le numero de la ligne
txts.s = le text qu'n veux afficher
coul = la couleur du text
----------------------------------------------------
enfin la procedure qui permet l'affichage a l'ecran
WriteLineText(num,x,y,larg,haut)
num= numero de la ligne ( numero de l'image )
x,y = la coordonée ou afficher la ligne (permet une animation eventuelle )
comme je me sert de la taille de la fenetre pour creer l'image , en principe
ça devrai rentrer entierement
note qu'en Purebasic, on a l'habitude de bidouiller pour avoir des résultats
c'est pas exceptionnel de devoir se reecrire des fonctions pour obtenir un resultat
le langage est fait pour ça !!
c'est pour ça que bien souvent on fait directement appel aux APIs du systeme...
voici le code a tester (on peut redimensionner la fenetre et voir le résultat )
- Code:
Enumeration
#font
#win
#bouton
#sprite1
#numero_ligne
EndEnumeration
Declare CreateLineText(win,num,txt.s,coul)
Declare WriteLineText(num,x,y)
If InitSprite() = 0
MessageRequester("Erreur", "Impossible d'ouvrir l'écran & l'environnement nécessaire aux sprites !", 0)
End
EndIf
If LoadFont(#font,"Comic sans Ms",30,#BOLD_FONTTYPE)
Else
MessageRequester("erreur" ,"fonte pas chargée")
EndIf
If OpenWindow(#win, 0, 0, 320, 200, "Un écran dans une fenêtre...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered| #PB_Window_SizeGadget )
rez_x=WindowWidth(#win)-5 ; on recup la resolution de la fenetre
rez_y=WindowHeight(#win)-5
redimenssionnement_auto=#True
If OpenWindowedScreen(WindowID(#win), 0, 0, rez_x, rez_y,redimenssionnement_auto,1,1,1)
; ******************* creation d'un ligne de text ********************
CreateLineText(#win,#numero_ligne,"Purebasic Power",rgb(255,255,0))
; ***************************************************************
; ************* Le sprite carré qui bouge ****************************
CreateSprite(#sprite1, 20, 20)
If StartDrawing(SpriteOutput(#sprite1))
Box(0, 0, 20, 20, RGB(255, 0, 155))
Box(5, 5, 10, 10, RGB(155, 0, 255))
StopDrawing() ;>
EndIf;|
Else
MessageRequester("Erreur", "Impossible d'ouvrir un écran dans la fenêtre!", 0)
End ;|
EndIf
Endif
; ***********************************************************************
directionx = 2 :directiony=2
Repeat ; boucle Event
Event = WaitWindowEvent(2)
Select Event
Case #PB_Event_SizeWindow ; en cas de redimenssionnement de la fenetre
Case #PB_Event_CloseWindow
End
EndSelect
; ******************* Affiche la ligne de text ************************
StartDrawing(ScreenOutput())
WriteLineText(#numero_ligne,5,50) ; affiche la ligne de text
StopDrawing()
; *****************************************************************
x + directionx
y + directiony
If x >= (screenWidth()-20) : directionx = -2 : EndIf
IF y>= (screenHeight() -20) :Directiony = -2 :Endif
If x <= 0 : directionx = -directionx : EndIf
If y <= 0:directiony = -directiony :Endif
DisplaySprite(#Sprite1, x, y) ;affiche le sprite carré
FlipBuffers()
ClearScreen(rgb(255,255,255))
ForEver
; ********************* Zone des Procedures *************************
Procedure CreateLineText(win,num,txt.s,coul)
;By Dobro
if Isimage(num)
FreeImage(num)
Endif
; on dessine dans l'ecran la phrase a ecrire
; le but est de recuperer sa taille en pixel
StartDrawing(ScreenOutput())
DrawingFont(Fontid(#font))
larg_text=TextWidth(txt.s)
haut_text=TextHeight(txt.s)
StopDrawing()
; on a la taille en pixel , on creer l'image pour correspondre a la phrase
CreateImage(num,larg_text,haut_text)
; maintenant on peut ecrire le text dans l'image qui viens d'etre adapté en taille
StartDrawing(imageOutput(num))
DrawingFont(Fontid(#font))
DrawText( 1,1,txt.s,coul)
StopDrawing()
EndProcedure
Procedure WriteLineText(num,x,y)
;By Dobro
DrawImage(imageID(num),x,y) ; on dessine simplement notre image, qui contient notre text
EndProcedure
; Epb
j'ajoute que bien souvent, on se creer des bibliotheques de fonctions (de procedures)
qu'on peut appeler a la volée de plusieurs façons
soit on se creer un fichier "*.pbi" qui contient la collections de procedures, ce qui forme notre bibliotheque de fonctions
puis dans notre code on importe le fichier pour invoquer l'une des procedures qui nous intéresse
ou bien on peut aussi se faire une collections de "Modules" , qui sont une forme d'écriture de bibliothèque de fonctions
ça reviens quasi au meme que le systeme a base de PBI (avec import )
ou bien , on peut aussi se creer une "librairie"
il faut un utilitaire spécial pour ça , qui va creer un fichier Lib qu'on pose dans le dossier "UserLibrary" de purebasic
ainsi nos fonctions seront directement utilisables comme les autres fonctions du Purebasic !!
cela nous permet d'étendre le langage avec nos propres noms de fonctions , sans avoir a faire d'import ...
mais ce dernier point demande quand meme de connaitre Purebasic ..(pas reservé aux débutants ) ...
l’inconvénient c'est qu'une librairie ainsi faite, ne peux pas etre modifié !!
si Purebasic change de version , il faut recompiler la lib a la nouvelle version (pas toujours mais souvent .. )
ce qui peut occasionner des problemes de compatibilité par la suite ....
l'avantage on est proprietaire de notre librairie ... il n'y a a que celui qui a les sources, qui peut la modifier...
note quand meme , que le probleme que tu rencontres, est exceptionnel , et semble ne toucher QUE ton ordi ....
Dernière édition par Dobro le Ven 11 Oct 2019 - 17:13, édité 5 fois
Dobro- Patient contaminé
- Nombre de messages : 293
Age : 59
Localisation : 43
Date d'inscription : 30/09/2019
Re: PURE BASIC - Le Topic officiel
bon effectivement
J'ai essayé le 125% sur 2 autres PC et c'est bon
Vu que ca ne concerne que mon PC portable (meme si surement d'autres PC mal configurés aussi) et surtout que ca n'arrive qu'en mode 125%.... je considère que l'incident est clos !
le PC portable en question c'est un ASUS proc 4200 fanless de 2008 ecran 14' Full HD sous windows 10 à jour.
Merci beaucoup pour tous tes posts et recherches
Le texte sur un sprite ca peut me servir
le dév peut continuer, les ceintures d'asteroides viennent d'apparaitre dans les systemes solaires
J'ai essayé le 125% sur 2 autres PC et c'est bon
Vu que ca ne concerne que mon PC portable (meme si surement d'autres PC mal configurés aussi) et surtout que ca n'arrive qu'en mode 125%.... je considère que l'incident est clos !
le PC portable en question c'est un ASUS proc 4200 fanless de 2008 ecran 14' Full HD sous windows 10 à jour.
Merci beaucoup pour tous tes posts et recherches
Le texte sur un sprite ca peut me servir
le dév peut continuer, les ceintures d'asteroides viennent d'apparaitre dans les systemes solaires
_______________________________________________________
Re: PURE BASIC - Le Topic officiel
Prof Dobro je ne vous lache pas
quel est l'equivalent de RANDOMIZE TIMER en Pure ?
C'est à dire réinitialiser le générateur de manière totalement imprévisible (grace au timer du pc)
Pour l'instant je ne trouve pas dans la doc en ligne
quel est l'equivalent de RANDOMIZE TIMER en Pure ?
C'est à dire réinitialiser le générateur de manière totalement imprévisible (grace au timer du pc)
Pour l'instant je ne trouve pas dans la doc en ligne
_______________________________________________________
Re: PURE BASIC - Le Topic officiel
Pardon, je n'etais pas la cette aprem
sinon pour recupe la valeur depuis le lancement du Pc
c'est "ElapsedMilliseconds()" qui renvoi le nombre de millisecondes depuis le demarrage de la machine
on se sert de ça pour chronometrer aussi les routines
exemple :
- Code:
For i= 1 to 10
seed=RandomSeed(random(1000)) ; on utilise un Seed aleatoire
debug random(100,1) ; on tire une chiffre aleatoire tiré de la liste Seed aleatoire aussi
NExt i
sinon pour recupe la valeur depuis le lancement du Pc
c'est "ElapsedMilliseconds()" qui renvoi le nombre de millisecondes depuis le demarrage de la machine
on se sert de ça pour chronometrer aussi les routines
exemple :
- Code:
;
; exemple d'utilisation comme chronomètre
;
TempsDepart.q = ElapsedMilliseconds() ; Récupère la valeur actuelle
Delay(1000) ; Attend 1000 millisecondes
TempsEcoule.q = ElapsedMilliseconds()-TempsDepart ; La valeur 'TempsEcoule' devrait être d'environ 1000 millisecondes
Debug "Temps écoulé : "+Str(TempsEcoule)+" millisecondes"
Dobro- Patient contaminé
- Nombre de messages : 293
Age : 59
Localisation : 43
Date d'inscription : 30/09/2019
Re: PURE BASIC - Le Topic officiel
ta premiere technique n'initialise pas vraiment le générateur, il poursuit une série en cours, ca ne fonctionne pas pour ma problematique.
En fait j'ai trouvé (grace à toi) :
randomseed(elapsedmilliseconds()))
Parfait !
En fait j'ai trouvé (grace à toi) :
randomseed(elapsedmilliseconds()))
Parfait !
_______________________________________________________
Re: PURE BASIC - Le Topic officiel
drfloyd a écrit:ta premiere technique n'initialise pas vraiment le générateur, il poursuit une série en cours, ca ne fonctionne pas pour ma problematique.
En fait j'ai trouvé (grace à toi) :
randomseed(elapsedmilliseconds()))
Parfait !
en fait la premiere technique fonctionne bien aussi :)
car RandomSeed(Seed)
permet d'utiliser une liste de chiffes aleatoire
ont tire dans cette liste bien precise une serie de chiffre avec Random(100) par exemple
c'est vrais que si on fait
RandomSeed(1)
et debug Random(10)
le chiffre tiré sera toujours le meme , puisqu'il est tiré de la meme liste !
mais RandomSeed(Random(1000)
initialise une liste Parmis 1000 !!! au hasard
et donc si tu fait Random (10) , tu n'aura pas toujours le meme chiffre tiré (la meme sequence)
exemple : quelque soit le nombre de fois que tu relances ce code
la liste généré sera toujours la meme
- Code:
seed=RandomSeed(1) ; on utilise un Seed precis
For i= 1 to 3
debug random(100,1) ; on tire une chiffre aleatoire tiré de la liste Seed 1
Next i
; sortira toujours les chiffres 73,19,61
; quelque soit l'ordnateur
; ça peut etre utilise en cryptologie par exemple
alors que ceci :
te garantie que la liste généré ne sera jamais la même
puisqu'on puise aléatoirement dans une liste (seed) tiré aléatoirement aussi ! (une parmi 1000 )
- Code:
seed=RandomSeed(random(1000)) ; on utilise un Seed aleatoire
For i= 1 to 3
debug random(100,1) ; on tire une chiffre aleatoire tiré de la liste Seed aleatoire aussi
Next i
;a chaque relance du code, les chiffres seront different puisque la liste "Seed" sera differente .....
il faut comprendre que un Seed c'est une liste de chiffres aléatoires
cette liste sera toujours la même
exemple (trivial)
la liste SEED 1 pourrai etre "1,5,9,10,12,...."
si tu utilises cette liste Seed (la 1) tu aura toujours a prendre un chiffre dans cette liste précise
mais des listes Seed on en a autant qu'on veux et toutes différentes !!!
donc losqu'on fait : Randomseed(Random(1000)) on prends une liste SEED au hasard parmi 1000 !!!
et ensuite le Random(100,1) permet de choisir dans cette liste Seed un nombre entre 1 et 100 .....
en Purebasic ça fonctionne comme ça :)
mais l'utilisation de elapsedmilliseconds() marche aussi , puisqu'au lieu de choisir une liste seed parmis 1000 , tu choisis de laisser le timer prendre une liste tout seul ... c'est bien pour ça que je t'ai mis cette fonction ... c'est seulement une autre façon de faire
Dobro- Patient contaminé
- Nombre de messages : 293
Age : 59
Localisation : 43
Date d'inscription : 30/09/2019
Re: PURE BASIC - Le Topic officiel
en fait bien avant dans le programme j'utilise des randomseed fixés sur un nombre, par intérêt.... et donc le randomseed(random (1000)) donnera toujours toujours les memes résultats, je ne repasse pas en aéatoire.
C'est pour ca que pour relancer la vraie machine aléatoire (meme si rien n'est aléatoire en informatique) je passe par le timer (qui dans Pure se nomme elapsedmilliseconds, la commande que je cherchais... dans la lettre T dans l'index )
C'est pour ca que pour relancer la vraie machine aléatoire (meme si rien n'est aléatoire en informatique) je passe par le timer (qui dans Pure se nomme elapsedmilliseconds, la commande que je cherchais... dans la lettre T dans l'index )
_______________________________________________________
Re: PURE BASIC - Le Topic officiel
non, tu confonds 2 fonctions !!
RandomSeed(Seed) qui choisi une liste (un Seed)
et la fonction Random(x) qui choisi un chiffre (ou nombre) aleatoire dans le Seed en cours !!
dans l'absolu si tu fait simplement
Debug Random(10)
ça va te sortir un chiffre entre 0 et 10 ....
au hasard , et jamais la sequence ne sera previsible !!
par contre si tu fait auparavant RandomSeed(5)
alors Debug Random(10) te sortira toujours la meme liste de chiffre aleatoire ...
qui sera pris dans la sequence 5 ....
RandomSeed(x) permet de choisir un generateur (une liste/une sequence) de nombre aleatoire
mais la fonction Random(x) elle permet de choisir un nombre aleatoire
qui sera pris dans cette liste(sequence)....
si tu ne specifie pas de randomSeed(x) alors la fonction Random(x)
te renvera un chiffre pris dans une sequence qui ne sera jamais la meme
c'est pourquoi le fait de faire RandomSeed(Random(x))
permet d'utiliser une sequence qui sera Aleatoire
lorsque tu utilises ElapsedMillseconde dans la fonction RandomSeed()
tu fais la meme chose , sauf que tu utilise le timer pour choisir la sequence
alors qu'avec Random(1000) ou random(10000) c'ets un nombre aleatoire
qui choisira la sequence ..
suis-je clair ?? LOL
plus haut, je t'ai mis 2 codes de teste, essaye les ...
RandomSeed(Seed) qui choisi une liste (un Seed)
et la fonction Random(x) qui choisi un chiffre (ou nombre) aleatoire dans le Seed en cours !!
dans l'absolu si tu fait simplement
Debug Random(10)
ça va te sortir un chiffre entre 0 et 10 ....
au hasard , et jamais la sequence ne sera previsible !!
par contre si tu fait auparavant RandomSeed(5)
alors Debug Random(10) te sortira toujours la meme liste de chiffre aleatoire ...
qui sera pris dans la sequence 5 ....
RandomSeed(x) permet de choisir un generateur (une liste/une sequence) de nombre aleatoire
mais la fonction Random(x) elle permet de choisir un nombre aleatoire
qui sera pris dans cette liste(sequence)....
si tu ne specifie pas de randomSeed(x) alors la fonction Random(x)
te renvera un chiffre pris dans une sequence qui ne sera jamais la meme
c'est pourquoi le fait de faire RandomSeed(Random(x))
permet d'utiliser une sequence qui sera Aleatoire
lorsque tu utilises ElapsedMillseconde dans la fonction RandomSeed()
tu fais la meme chose , sauf que tu utilise le timer pour choisir la sequence
alors qu'avec Random(1000) ou random(10000) c'ets un nombre aleatoire
qui choisira la sequence ..
suis-je clair ?? LOL
plus haut, je t'ai mis 2 codes de teste, essaye les ...
Dobro- Patient contaminé
- Nombre de messages : 293
Age : 59
Localisation : 43
Date d'inscription : 30/09/2019
Re: PURE BASIC - Le Topic officiel
oui tres clair, et je savais tout ca, c'est la base et je maitrise. Mais je crois que je n'arrive pas à m'expliquer (gros probleme chez moi LOL) J'avais juste besoin de connaitre la syntaxe de timer en Pure...
Car dans mon cas précis de jeu procédural, le RandomSeed(Random(x)) ca ne va pas... c'est lié à la structure particuliere du programme et je dois vraiment reinitialiser via le timer...
je sais je ne suis pas clair
Car dans mon cas précis de jeu procédural, le RandomSeed(Random(x)) ca ne va pas... c'est lié à la structure particuliere du programme et je dois vraiment reinitialiser via le timer...
je sais je ne suis pas clair
_______________________________________________________
Re: PURE BASIC - Le Topic officiel
bon bon, ok ok ...
pour info a propos des Fonctions Lié au DPI de Purebasic
Fred , bosse encore dessus .... il est possible qu'il y ai des futurs patch a ce sujet....
en realité c'est pas une chose simple , car il semble deja que cela ne touche que
Windows (Linux et Mac Os serai epargné par le soucis de DPI )
cela proviendrai du fait que Microsoft utilise un melange de Vectoriel et de bitmap
concernant les fontes ... et qu'en realité c'est un vrais foutoir ...
les DPI ne semblent pas etre constant suivant les resolutions employés...
bref , pour le moment c'est un vrais casse tete ...
les fonctions lié au DPI dans Purebasic , marchent a peut pret pour ce qui concerne les applications avec interface type Gadgets...
pour les "Canvas" et autres Screen , c'est une autre paire de manche ...
je pense au final que d'utiliser un sprite ou une image, dans ce cas, n'est pas forcement la plus mauvaise idée
pour info a propos des Fonctions Lié au DPI de Purebasic
Fred , bosse encore dessus .... il est possible qu'il y ai des futurs patch a ce sujet....
en realité c'est pas une chose simple , car il semble deja que cela ne touche que
Windows (Linux et Mac Os serai epargné par le soucis de DPI )
cela proviendrai du fait que Microsoft utilise un melange de Vectoriel et de bitmap
concernant les fontes ... et qu'en realité c'est un vrais foutoir ...
les DPI ne semblent pas etre constant suivant les resolutions employés...
bref , pour le moment c'est un vrais casse tete ...
les fonctions lié au DPI dans Purebasic , marchent a peut pret pour ce qui concerne les applications avec interface type Gadgets...
pour les "Canvas" et autres Screen , c'est une autre paire de manche ...
je pense au final que d'utiliser un sprite ou une image, dans ce cas, n'est pas forcement la plus mauvaise idée
Dobro- Patient contaminé
- Nombre de messages : 293
Age : 59
Localisation : 43
Date d'inscription : 30/09/2019
Re: PURE BASIC - Le Topic officiel
Utilisés au travers de Delphi, les dpi windows des canvas me semblent consistents, que ce soit le canvas d'une image ou d'une printer, j'obtiens le même aspect, polices vectorielles ou bitmap. Et heureusement non ? Je pense que ça se saurait si windows avait un souci à ce niveau
Re: PURE BASIC - Le Topic officiel
Urbinou a écrit:Utilisés au travers de Delphi, les dpi windows des canvas me semblent consistents, que ce soit le canvas d'une image ou d'une printer, j'obtiens le même aspect, polices vectorielles ou bitmap. Et heureusement non ? Je pense que ça se saurait si windows avait un souci à ce niveau
mais... ça se sait !!
tiens par Microsoft en personne !
https://support.microsoft.com/fr-fr/help/3025083/windows-scaling-issues-for-high-dpi-devices
extrait :
Les problèmes de mise à l’échelle sont particulièrement complexes. Il n’existe pas de recette miracle ou de solution universelle pour résoudre tous les problèmes de mise à l’échelle DPI. La mise à l’échelle DPI bénéficie d’améliorations continues dans le système d’exploitation, dans les modèles de développement d’applications et dans les applications développées par Microsoft et par des tiers.
je pourrai te donner des liens vers des topics ecrit par des "pro" du Purebasic (qui bien souvent sont des pro dans d'autres langage )
et qui en parlent depuis un bon moment en fait ....
le gros defaut de Windows c'est de concilier le vectoriel et les bitmaps... pour ce qui concerne les fontes ...
le fait de trainer du Bitmap a ce sujet est un boulet !!
mais en meme temps souvent une solution a notre niveau
puisqu'une image, on arrive encore a bidouiller avec ...
note que ce probleme ne semble pas exister dans le monde Linux ... (ni mac Os apparemment )
le format des fontes , doit etre differents (tout vectoriel ?? )
ps: je ne connais pas Delphi , mais je pense que c'est plus haut level que Purebasic
ce qui semble ce confirmer lorsque je lis ceci :
L'environnement de développement auto-génère du code pour faciliter le travail du programmeur. Il maintient une correspondance automatique entre la vue de conception (la fenêtre que le programmeur bâtit en déposant des composants graphiques) et l'éditeur de code (la vue affichant le code source qui créera ces composants à l'exécution).
donc probablement qu'il doit y avoir une aide au context (des bornes ? )
bref , ce problemes doit probablement aussi etre connu des codeur C++ , C , Ass , bref des langages plus pres du systeme ....
Dobro- Patient contaminé
- Nombre de messages : 293
Age : 59
Localisation : 43
Date d'inscription : 30/09/2019
Re: PURE BASIC - Le Topic officiel
tu as des langages comme NAALAA qui utilisent leur propres routines graphiques, rien à foutre de Windows... et le resultat est top, sans lissage, sans flou, et rapide. Et puis le resultat est 100% identique sur toutes les machines.
As NaaLaa is aimed to games creation, it deserves to be mentioned the unusual feature that neither DirectX or OpenGL is used for graphics rendering. It's author has preferred to build its own graphical routines. According to the author, the main advantages are: the number of images you can use only depends on the available RAM memory, images may be modified on the fly without having to wait for them to be uploaded to texture memory, no different color formats, nor bad artifacts are displayed thanks to a better optimization of the backbuffer, same graphical output on every machine, to achieve maximum speed only 7 bits, instead of 8, are used for the alpha component of images.
As NaaLaa is aimed to games creation, it deserves to be mentioned the unusual feature that neither DirectX or OpenGL is used for graphics rendering. It's author has preferred to build its own graphical routines. According to the author, the main advantages are: the number of images you can use only depends on the available RAM memory, images may be modified on the fly without having to wait for them to be uploaded to texture memory, no different color formats, nor bad artifacts are displayed thanks to a better optimization of the backbuffer, same graphical output on every machine, to achieve maximum speed only 7 bits, instead of 8, are used for the alpha component of images.
_______________________________________________________
Re: PURE BASIC - Le Topic officiel
drfloyd a écrit:tu as des langages comme NAALAA qui utilisent leur propres routines graphiques, rien à foutre de Windows... et le resultat est top, sans lissage, sans flou, et rapide. Et puis le resultat est 100% identique sur toutes les machines.
As NaaLaa is aimed to games creation, it deserves to be mentioned the unusual feature that neither DirectX or OpenGL is used for graphics rendering. It's author has preferred to build its own graphical routines. According to the author, the main advantages are: the number of images you can use only depends on the available RAM memory, images may be modified on the fly without having to wait for them to be uploaded to texture memory, no different color formats, nor bad artifacts are displayed thanks to a better optimization of the backbuffer, same graphical output on every machine, to achieve maximum speed only 7 bits, instead of 8, are used for the alpha component of images.
J'ai énormément de mal à voir comment il peut se passer du pilote de la carte graphique, lequel dépend de l'architecture. À mon avis il utilise la SDL ou Allegro.
Tryphon- Docteur *
- Nombre de messages : 26166
Age : 47
Localisation : Un peu plus à l'Ouest
Date d'inscription : 23/07/2016
Re: PURE BASIC - Le Topic officiel
Je crois pas en fait !
Je vais faire un comparatif de test de rapidité entre PURE (le langage proche de l'assembleur), BLIZ (le langage assisté) et ce NAALAA (langage qui dit avoir inventé ses propres routines graphiques ultra rapides)
Je vais faire un comparatif de test de rapidité entre PURE (le langage proche de l'assembleur), BLIZ (le langage assisté) et ce NAALAA (langage qui dit avoir inventé ses propres routines graphiques ultra rapides)
_______________________________________________________
Re: PURE BASIC - Le Topic officiel
J'ai vérifié : Naalaa ne publie pas son source. Mais je suis quasi sûr que c'est de la D5SL ou de l'Allegro. Tu peux faire de la 3D avec ?
Tryphon- Docteur *
- Nombre de messages : 26166
Age : 47
Localisation : Un peu plus à l'Ouest
Date d'inscription : 23/07/2016
Re: PURE BASIC - Le Topic officiel
oui, possible
et un mode 7 "Snes"
et un mode 7 "Snes"
_______________________________________________________
Re: PURE BASIC - Le Topic officiel
De la vraie 3D ou juste un mode 7 ?
Tryphon- Docteur *
- Nombre de messages : 26166
Age : 47
Localisation : Un peu plus à l'Ouest
Date d'inscription : 23/07/2016
Re: PURE BASIC - Le Topic officiel
je n'ai vraiment regardé, il y a une mini librairie 3D pour faire des Doom et Quake simples
_______________________________________________________
Re: PURE BASIC - Le Topic officiel
C'est pas de la 3D (c'est du raycasting). Donc oui, je pense que c'est basé sur une lib 2D classique genre SDL...
Tryphon- Docteur *
- Nombre de messages : 26166
Age : 47
Localisation : Un peu plus à l'Ouest
Date d'inscription : 23/07/2016
Page 6 sur 12 • 1, 2, 3 ... 5, 6, 7 ... 10, 11, 12
Sujets similaires
» [BASIC QB64] le topic officiel du meilleur basic au monde ?
» [BLITZ BASIC] le topic officiel du meilleur basic au monde ?
» * MSX * TOPIC OFFICIEL II
» GOG le topic officiel
» *** PUREBASIC *** LE TOPIC OFFICIEL
» [BLITZ BASIC] le topic officiel du meilleur basic au monde ?
» * MSX * TOPIC OFFICIEL II
» GOG le topic officiel
» *** PUREBASIC *** LE TOPIC OFFICIEL
Page 6 sur 12
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum