PURE BASIC - Le Topic officiel
+8
grostonton
Urbinou
ShiningBZH
Tryphon
goux.m
jmg49
Capitaine
Shaoth
12 participants
Page 5 sur 12
Page 5 sur 12 • 1, 2, 3, 4, 5, 6 ... 10, 11, 12
Re: PURE BASIC - Le Topic officiel
Shaoth a écrit:A la souris !!!! Et pourquoi pas au trakball aussi !!!
Tu deviens fou Doc...
Je ne te reconnais plus...
je peux revenir en arrière.... je pensais que c'etait sympa pour gerer l'inventaire, l'alimentation, les achats ventes, le bricolage dans le vaisseau....
je sais tres bien gerer tout ca avec 4 directions et 1 seule touche d'action.
_______________________________________________________
Re: PURE BASIC - Le Topic officiel
Je te taquine Doc !
Ton jeu, tes règles !
C'est ton produit à toi, pas une commande faite par E.A. it's in the game
Tu avais une interface très épurée dans le 1, un peu trop, heureusement que tu as accepté de rajouter la touche Esc.
Il faut que tu passes à autre chose avec le 2 et pas que tu nous refasse encore et encore le même jeu !
J'aime bien l'exemple de @Atlantis qui fait la suite de son jeu sur une machine de génération différente à chaque épisode. C'est super classe !
La gestion à la souris et la présence d'un équipage c'est super bien, j'adore.
Tu augmente la résolution, c'est super aussi, mais il faut aussi que tu fasses évoluer la qualité des graphismes, c'est un jeu 16bit maintenant.
Ne fait pas comme un de nos amis qui produit des jeux 8bit sur des machines 16bit
"Ami de nous, si tu nous lis, sache que ce n'est pas un reproche, mais un clin d'oeil"
Tes idées sont bonnes, mènes les à terme et ne te prends pas la tête sur la technique.
Je préfère un jeu qui me fait rêver avec quelques imperfections plutôt qu'un jeu chiant mais impeccable.
Bon je retourne à ma Switch moi...
Ton jeu, tes règles !
C'est ton produit à toi, pas une commande faite par E.A. it's in the game
Tu avais une interface très épurée dans le 1, un peu trop, heureusement que tu as accepté de rajouter la touche Esc.
Il faut que tu passes à autre chose avec le 2 et pas que tu nous refasse encore et encore le même jeu !
J'aime bien l'exemple de @Atlantis qui fait la suite de son jeu sur une machine de génération différente à chaque épisode. C'est super classe !
La gestion à la souris et la présence d'un équipage c'est super bien, j'adore.
Tu augmente la résolution, c'est super aussi, mais il faut aussi que tu fasses évoluer la qualité des graphismes, c'est un jeu 16bit maintenant.
Ne fait pas comme un de nos amis qui produit des jeux 8bit sur des machines 16bit
"Ami de nous, si tu nous lis, sache que ce n'est pas un reproche, mais un clin d'oeil"
Tes idées sont bonnes, mènes les à terme et ne te prends pas la tête sur la technique.
Je préfère un jeu qui me fait rêver avec quelques imperfections plutôt qu'un jeu chiant mais impeccable.
Bon je retourne à ma Switch moi...
Shaoth- Guéri miraculeux
- Nombre de messages : 2234
Age : 54
Localisation : 92
Date d'inscription : 05/04/2018
Re: PURE BASIC - Le Topic officiel
Ouais je vais me faire plaisir, ca sera mon tout dernier jeu, avant la retraite. Ca sera le chef d'oeuvre de ma vie
Infinity en tremble
Infinity en tremble
_______________________________________________________
Re: PURE BASIC - Le Topic officiel
Et au fait, tu as raison, ce n'est pas la peine de donner au joueur un univers complet, c'est trop grand
Un petit bout de galaxie suffit amplement, quelques système solaires et hop !
Penses à Sundog
Un petit bout de galaxie suffit amplement, quelques système solaires et hop !
Penses à Sundog
Shaoth- Guéri miraculeux
- Nombre de messages : 2234
Age : 54
Localisation : 92
Date d'inscription : 05/04/2018
Re: PURE BASIC - Le Topic officiel
c'est encore ma grande interrogation :
je part sur l'univers complet (250 milliards de galaxies) ou une seule galaxie dense....
Le gros soucis de Cosmos 1 est qu'il fallait un miracle pour découvrir une civilisation...
je part sur l'univers complet (250 milliards de galaxies) ou une seule galaxie dense....
Le gros soucis de Cosmos 1 est qu'il fallait un miracle pour découvrir une civilisation...
_______________________________________________________
Re: PURE BASIC - Le Topic officiel
ça semble tres sympath :)
tu nous refais un "no man's Sky" en 2d ?
bravo a toi, et bon courage en tout cas
tu nous refais un "no man's Sky" en 2d ?
bravo a toi, et bon courage en tout cas
Dobro- Patient contaminé
- Nombre de messages : 293
Age : 59
Localisation : 43
Date d'inscription : 30/09/2019
Re: PURE BASIC - Le Topic officiel
je deteste No Man Sky, c'est un anti No Man Sky
_______________________________________________________
Re: PURE BASIC - Le Topic officiel
Ya pas d'interrogation... va au plus simple !!
Si c'est pour avoir des milliards de planètes avec des civilisations sans rien à faire ou des quêtes lambda c'est pas fun
Il vaut mieux une dizaine de planètes bien pensées et différentes !!
Si c'est pour avoir des milliards de planètes avec des civilisations sans rien à faire ou des quêtes lambda c'est pas fun
Il vaut mieux une dizaine de planètes bien pensées et différentes !!
Shaoth- Guéri miraculeux
- Nombre de messages : 2234
Age : 54
Localisation : 92
Date d'inscription : 05/04/2018
Re: PURE BASIC - Le Topic officiel
je pense plutot a une galaxie complete, 200 milliards de systemes solaires, avec une dizaine de civilisations qui se la partagent... avec son lot de conflits....
La c'est plutot facile à gérer, et dans la tete du joueur ca sera clair.
La c'est plutot facile à gérer, et dans la tete du joueur ca sera clair.
_______________________________________________________
Re: PURE BASIC - Le Topic officiel
*drfloyd a écrit:je pense plutot a une galaxie complete, 200 milliards de systemes solaires,
200 milliards ??? tu vas eclater ---> (lire a partir de 1:56)
Dobro- Patient contaminé
- Nombre de messages : 293
Age : 59
Localisation : 43
Date d'inscription : 30/09/2019
Re: PURE BASIC - Le Topic officiel
Dans Cosmos I il y a 200 milliards de galaxies x environ 100 à 400 milliards d'etoiles par galaxie...j'ai voulu simuler l'univers dans son ensemble....
et encore plus de planetes
et encore plus de planetes
_______________________________________________________
Re: PURE BASIC - Le Topic officiel
C'est techniquement très impressionnant, je ne saurais même pas comment commencer un truc pareil.drfloyd a écrit:Dans Cosmos I il y a 200 milliards de galaxies x environ 100 à 400 milliards d'etoiles par galaxie...j'ai voulu simuler l'univers dans son ensemble....
et encore plus de planetes
Mais franchement pour le gameplay... Si tu avais une armée de stagiaire pour ajouter du contenu dans Cosmos (et un moteur de jeu qui le permet) ce serai incroyablement riche, mais là on ressent quand même le vide,ce qui est plutôt normal pour l'espace intersidéral.
Elite est propose un gameplay basé sur le commerce, le combat et l'exploration, du procédural fait le boulot, mais toi tu veux raconter une histoire. alors il faut un background riche et cohérent.
Shaoth- Guéri miraculeux
- Nombre de messages : 2234
Age : 54
Localisation : 92
Date d'inscription : 05/04/2018
Re: PURE BASIC - Le Topic officiel
Face à un tel espace il ne faut pas une armée de stagiaire pour remplir (ca serait peine perdue), mais surtout un moteur de jeu qui soit capable de remplir lui meme cet univers.... de manière cohérente.
Après on peut raconter une histoire cohérente dans un petit bout de cet univers. J'ai essayé de faire ça dans Cosmos I, mais du coup la vraie exploration et son intérêt n'ont pas été bossée (aucun interet réel de changer de galaxie par exemple, ni meme d'aller tres loin dans la galaxie de départ).
Le but c'est de réussir à mener les 2 de front.
j'ai commencé tout doucement Cosmos II et pour chaque ligne de code je vais me servir de l'expérience acquise dans le I, pour me dire que chaque aspect du jeu doit etre amélioré.
Après on peut raconter une histoire cohérente dans un petit bout de cet univers. J'ai essayé de faire ça dans Cosmos I, mais du coup la vraie exploration et son intérêt n'ont pas été bossée (aucun interet réel de changer de galaxie par exemple, ni meme d'aller tres loin dans la galaxie de départ).
Le but c'est de réussir à mener les 2 de front.
j'ai commencé tout doucement Cosmos II et pour chaque ligne de code je vais me servir de l'expérience acquise dans le I, pour me dire que chaque aspect du jeu doit etre amélioré.
_______________________________________________________
Re: PURE BASIC - Le Topic officiel
je voudrai revenir au Purebasic, juste pour montrer une chose, qu'il faut eviter le plus possible
non pas qu'on ne puisse pas dans certains cas faire cette petite erreur
mais, qu'il faut dans la mesure du possible eviter de faire .... je m'explique
lorsqu'on dessine un point , une ligne, bref n'importe quoi a l'ecran
.....
et lorsqu'on a plein de points a dessiner
on a souvent tendance a faire ceci :
et cela marche tres bien .... sauf que ....
le fait d'invoquer le context Graphique, et de le quitter a chaque boucle ,
ça prends beaucoup de temps .... (trop de temps )
je cite cette exemple, car il est souvent la cause de problemes de lenteur
chez les "débutants" en Purebasic ....
la solution conciste a faire ceci :
de cette façon, on ouvre le contexte et le ferme, qu'une seule fois
le resultat est carrement plus rapide !!
un exemple viable qui montre que meme en Full HD c'est quasi instantané....
non pas qu'on ne puisse pas dans certains cas faire cette petite erreur
mais, qu'il faut dans la mesure du possible eviter de faire .... je m'explique
lorsqu'on dessine un point , une ligne, bref n'importe quoi a l'ecran
on ouvre le contexte graphique avec par exemple un
StartDrawing(ImageOutput(0))
puis on dessine notre point (ici dans une image) avec un
Plot(X, Y, RGB(Random(255), Random(255), Random(255)))
et on ferme le context Graphique pour passer a autre chose
StopDrawing()
.....
et lorsqu'on a plein de points a dessiner
on a souvent tendance a faire ceci :
For x = 0 To 199
For y = 0 To 199
StartDrawing(ImageOutput(0))
Plot(X, Y, RGB(Random(255), Random(255), Random(255)))
StopDrawing()
Next y
Next x
et cela marche tres bien .... sauf que ....
le fait d'invoquer le context Graphique, et de le quitter a chaque boucle ,
ça prends beaucoup de temps .... (trop de temps )
je cite cette exemple, car il est souvent la cause de problemes de lenteur
chez les "débutants" en Purebasic ....
la solution conciste a faire ceci :
StartDrawing(ImageOutput(0))
For x = 0 To 199
For y = 0 To 199
Plot(X, Y, RGB(Random(255), Random(255), Random(255)))
Next y
Next x
StopDrawing()
de cette façon, on ouvre le contexte et le ferme, qu'une seule fois
le resultat est carrement plus rapide !!
un exemple viable qui montre que meme en Full HD c'est quasi instantané....
ExamineDesktops() ; on examine la resolution en cours
ecranx=DesktopWidth(0) ; recup la resolution X
ecrany=DesktopHeight(0) ; recup la resolution Y
If OpenWindow(0, 0, 0, ecranx, ecrany, "Plot", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) ; ouvre une fenetre avec la possibilité de reduire ou quitter celle-ci
If CreateImage(0, ecranx, ecrany) ; on creer une image vide de la taille de notre ecran
StartDrawing(ImageOutput(0)) ; on entre dans le context graphique (ici l'image cree precedemment)
; on execute notre dessin , ici des points de couleurs aléatoire
For x = 0 To ecranX-1
For y = 0 To ecranY-1
Plot(X, Y, RGB(Random(255), Random(255), Random(255)))
Next y
Next x
StopDrawing() ; sort du contexte grahique
ImageGadget(0, 0, 0, 200, 200, ImageID(0)) ; pose l'image qu"on viens de remplir de mulpiple points aleatoire , dans la fenetre
EndIf
Repeat ; boucle
Event = WaitWindowEvent() ; recupere les Evenements eventuelle ... (clique sur la croix de fermeture par exemple , ou la reduction d la fenetre )
Until Event = #PB_Event_CloseWindow ; si l'evenement correspond a la fermeture de la fenetre avec la petite croix blanche sur fond rouge , on sort de la boucle
EndIf
Dernière édition par Dobro le Ven 4 Oct 2019 - 10:40, édité 3 fois
Dobro- Patient contaminé
- Nombre de messages : 293
Age : 59
Localisation : 43
Date d'inscription : 30/09/2019
Re: PURE BASIC - Le Topic officiel
Oui, ca me j'en doutais qu'il fallait éviter de multipler les start et stop pour dessiner et de tout balancer d'un coup
Pourquoi cette necessité pour PURE d'avoir cette fonctionnalité un peu lourde ? Et pourquoi ne pas avoir intégré les sprites dedans ?
L'erreur qu'on commet non stop au debut c'est d'oublier que les sprites (qui sont en fait des dessins comme des autres) ne sont pas concernés
Merci pour tes petits trucs et astuces en tout cas Dobro ! Je suis fan.
Pourquoi cette necessité pour PURE d'avoir cette fonctionnalité un peu lourde ? Et pourquoi ne pas avoir intégré les sprites dedans ?
L'erreur qu'on commet non stop au debut c'est d'oublier que les sprites (qui sont en fait des dessins comme des autres) ne sont pas concernés
Merci pour tes petits trucs et astuces en tout cas Dobro ! Je suis fan.
_______________________________________________________
Re: PURE BASIC - Le Topic officiel
je n'ai pas encore compris l'interet de la fonction imagegadget ?
Je fais sans actuellement.
Ca permet de créer un cadre dans une image, pour par exemple que tout ce qui depasserait du cadre ne puisse pas s'afficher en débordement ?
Je fais sans actuellement.
Ca permet de créer un cadre dans une image, pour par exemple que tout ce qui depasserait du cadre ne puisse pas s'afficher en débordement ?
_______________________________________________________
Re: PURE BASIC - Le Topic officiel
le context "StartDrawing(destination)" permet de dessiner
sur l'ecran directement avec :
StartDrawing(ScreenOutput(num_ecran²))
ou bien sur une image avec
StartDrawing(imageOutput(num_image))
ou bien sur un sprite avec
StartDrawing(spriteOutput(numero_de_sprite))
ou bien sur l'imprimante avec
StartDrawing(PrinterOutput())
ou bien sur le Canvas Gadget avec
StartDrawing(CanvasOutput())
ou bien sur une texture (pour l'utilisation du moteur OGRE (3D)
StartDrawing(TextureOutput())
cela peut paraitre "lourd" parceque tu es habitué a etre deja dans un contexte
en realité sous windows TOUT les programmes font ainsi !!
simplement dans un langage "haut niveau" lambda , le contexte est en fait ouvert
en arrière plan au moment de la "compilation" ou de l’interprétation ...
avec Purebasic , qui je le rappel est un enfant de l'assembleur
tu accèdes directement au APIs windows ... alors que dans d'autres langage sous windows, la plupart du temps tu codes deja dans un context Pré-configuré pour toi ..
mais cela occasionne bien souvent des exécutables bien plus gros, et aussi une ribambelle de librairies que tu es obligé de fournir avec ton programme ....
c'est un choix décidé des le depart de la création du langage Purebasic :)
pour imageGadget() :
Purebasic permet de creer des applications Graphique type DirectX ... jeux (sprite, screen ...)
mais il permet aussi de programmer des Utilitaires windows
bref ,tout programme utilisant des "Gadgets" , les gadgets sont souvent appelés "WidGet" dans d'autres langages
cela regroupe les boutons a cliquer , les fenêtres , les champs pour entrer une données
la souris... , les menus , bref tout ce qu'on vois en général dans un programme basé sur les "Gadgets" (widget)
et imageGadget() est un Gadget qui permet d'afficher une image dans le cadre
d'une application de bureau ..sans avoir a invoquer Directx ou openGL ...
ça peut servir a afficher une image dans le cas de la programmation d'un Viewer d'image type "IrfanView" par exemple
ou bien a simplement afficher un logo dans l'interface de ton programme ...
en exemple , je viens de te faire un mini_viewer d'image
crée justement a base de ce fameux ImageGadget :)
je l'ai super documenté, pour que tu (ceux qui lisent) comprenne(nt)s bien tout ce qui se passe :)
autre chose, le fait d'avoir une image dans un gadget te garantie qu'elle ne s'effacera pas , si tu met la fenetre a moitée hors des limite de ton ecran ....
le code ci-dessus donne ceci
sur l'ecran directement avec :
StartDrawing(ScreenOutput(num_ecran²))
ou bien sur une image avec
StartDrawing(imageOutput(num_image))
ou bien sur un sprite avec
StartDrawing(spriteOutput(numero_de_sprite))
ou bien sur l'imprimante avec
StartDrawing(PrinterOutput())
ou bien sur le Canvas Gadget avec
StartDrawing(CanvasOutput())
ou bien sur une texture (pour l'utilisation du moteur OGRE (3D)
StartDrawing(TextureOutput())
cela peut paraitre "lourd" parceque tu es habitué a etre deja dans un contexte
en realité sous windows TOUT les programmes font ainsi !!
simplement dans un langage "haut niveau" lambda , le contexte est en fait ouvert
en arrière plan au moment de la "compilation" ou de l’interprétation ...
avec Purebasic , qui je le rappel est un enfant de l'assembleur
tu accèdes directement au APIs windows ... alors que dans d'autres langage sous windows, la plupart du temps tu codes deja dans un context Pré-configuré pour toi ..
mais cela occasionne bien souvent des exécutables bien plus gros, et aussi une ribambelle de librairies que tu es obligé de fournir avec ton programme ....
c'est un choix décidé des le depart de la création du langage Purebasic :)
pour imageGadget() :
Purebasic permet de creer des applications Graphique type DirectX ... jeux (sprite, screen ...)
mais il permet aussi de programmer des Utilitaires windows
bref ,tout programme utilisant des "Gadgets" , les gadgets sont souvent appelés "WidGet" dans d'autres langages
cela regroupe les boutons a cliquer , les fenêtres , les champs pour entrer une données
la souris... , les menus , bref tout ce qu'on vois en général dans un programme basé sur les "Gadgets" (widget)
et imageGadget() est un Gadget qui permet d'afficher une image dans le cadre
d'une application de bureau ..sans avoir a invoquer Directx ou openGL ...
ça peut servir a afficher une image dans le cas de la programmation d'un Viewer d'image type "IrfanView" par exemple
ou bien a simplement afficher un logo dans l'interface de ton programme ...
en exemple , je viens de te faire un mini_viewer d'image
crée justement a base de ce fameux ImageGadget :)
je l'ai super documenté, pour que tu (ceux qui lisent) comprenne(nt)s bien tout ce qui se passe :)
- Code:
;{- Enumerations / DataSections
;{ Windows
; ici on va utilise les librairie interne de Purebasic
; pour pouvoir decoder les images de different format
UseGIFImageDecoder()
UseJPEGImageDecoder()
UsePNGImageDecoder()
UseTGAImageDecoder()
UseTIFFImageDecoder()
; ici on prepare nos constantes
;le fait de les mettre entre enumeration et endenumeration, permet de leur attribuer
; automatiquement une valeur ... par defaut ça va de 0 a ..... nombre de constantes entrée ...
; le fait d'utiliser des constantes, rend le code bien plus lisible !
Enumeration
#Win ; <--- ceci par exemple sera la constante designant la fenetre principale
EndEnumeration
;}
;{ Gadgets
Enumeration
#Text_0 ; vaudra 0
#Button_load
#Image_gadget
#Button_arriere ; vaudra 3
#Button_avant
#Text_taille
#Text_label ; vaudra 6
EndEnumeration
;}
;{ Fonts
Enumeration
#Font_Text_0
EndEnumeration
;}
;{ Images
Enumeration
#image
EndEnumeration
;}
Define.l Event ; ceci n'est pas obligatoire, on declare simplement le fait que la variable "event" sera de type Long d'ou le ".L" apres define
;}
Declare OpenWindow_Win() ; on declare la procedure qui va creer la fenetre, parceque j'aime bien mettre les procedures a la fin du listing ....
; donc dans ce cas, la declaration est obligatoire !
NewList image_list.s() ; on creer une liste qui va recevoir le nom des fichiers images contenu dans le repertoire choisi !
OpenWindow_Win() ; ceci est appel a le procedure qui va creer et ouvrir la fenetre principale
;{- Event loop ;<--- a partir de là on entre dans la boucle principale du programme
; c'est la dedans (entre le repeat et son "Forever") qu'on va gerer les evenement lié au programme , un clique souris, ou un clique sur un gadget par exemple ....
Repeat
Event = WaitWindowEvent(12) ; on attent un evenement .... le (12) permet de laisser du temps au systeme... on rends la main en quelques sorte
Select Event
; ///////////////////
Case #PB_Event_Gadget ; tiens un evenement de gadget apparait !!
Select EventGadget() ; on regarde ce que c'est comme evenement
Case #Text_0 ; ce serai un evenement lié au gadget "Text_0
Case #Button_load ; c'est un evenement lié a un clique sur le bouton "#button_load" ... on va donc effectuer un traitement lié a ce bouton ... ce qui suit :
fichier_image.s = OpenFileRequester("Load_image","c:\" ,"*.jpg;*.bmp;*.png;*.gif;*.tga;*.tiff",1 ) ; on fait afficher une boite qui permet de choisir un fichier
chemin_image.s= GetPathPart(fichier_image.s) ; on recupere le non du fichier + son chemin dans son entier .....
nom_fichier_image.s=GetFilePart(fichier_image.s) ; ici on met en variable seulement le chemin , ça va nous servir pour plus tard
; on en profite pour faire la liste des images se trouvant dans le repertoire en cours
If ExamineDirectory(0, chemin_image.s, "*.*") ; pour chaque fichier se trouvant dans le repertoire en cours d'examen ..
While NextDirectoryEntry(0) ; et tant qu'il y a un fichier a regarder
If DirectoryEntryType(0) = #PB_DirectoryEntry_File ; on regarde ce que c'est , si c'est un fchier ou peut etre un dossier... ici on ne s'interresse qu'aux fichiers !
Type$ = " [Fichier] "
Taille$ = " (Taille : " + DirectoryEntrySize(0) + ")" ; on recupere dans une variable la taille du fichier examiné
extention.s= GetExtensionPart( DirectoryEntryName(0)) ; on recupere l'extension du fichier si c'est bien un "*.jpg" et pas un "*.txt" par exemple
if extention.s ="jpg" or extention.s="bmp" or extention.s="png" or extention.s="gif" or extention.s="tga" or extention.s="tiff" ; ici on chois de ne recuperer que les extensions images
AddElement(image_list()) ; comme c'est bien une extension d'image, on pose le nom du fichier dans la liste ....
if Taille$ <>"" and DirectoryEntryName(0)<>"" ; on verifie bien toutefois que le fichier a une taille pas de fichier fantomes .. on veu du vrais LOL
image_list()=DirectoryEntryName(0)+","+Taille$ ; on pose donc le nom de l'image plus une virgule
Debug Type$ + DirectoryEntryName(0) + Taille$ ; et on pose la taille de l'image , la virgule nous servira de séparateur par la suite ....
Endif
Endif
EndIf
Wend
FinishDirectory(0) ; on a fini d'explorer le repertoire en cours
EndIf
ResetList(image_list.s()) ; on se met juste avant le premier element de notre liste, liste qui contient donc les noms d'images+ une virgule + la taille de l'image , et ceci pour toutes les images (c'est une liste)
foreach image_list.s() ; pour chaque element de la liste
if stringfield(image_list.s(),1,",")=nom_fichier_image.s ; on regarde si avant la virgule (donc le nom de l'image) est egale a la premiere image qu'on a choisi de voir
SetGadgetText(#text_label,stringfield(image_list.s(),1,",")) ; lorsque c'est le cas , on recupere dans la liste le nom d el'image et on la colle dans le gadget text pour afficher le nom
SetGadgetText (#Text_taille,StringField(image_list.s(),2,",")) ; on fait pareil avec le gadget text qui doit afficher la taille de l'image
Endif ; un fois trouvé j'aurai pu utilise un BReak pour ne pas continuer a regarder les autres elements de la liste, mais pour faire simple, je n'ai rien mis.. on attends dons la fin de l'exploration
Next ; voila ici on a fini
if LoadImage(#image,fichier_image.s) <>0 ; on peut donc charger notre image choisi , et si le chargement se passe bien (valeur <>0)
ResizeImage(#image,685, 370) ; on redimensione l'image a la taille du GADGET IMAGE :o)
SetGadgetState(#image_gadget,ImageId(#image)) ; on pose notre image redimensionné dans le gadget image (c'est cool on va pouvoir , voir notre image )
Else
MessageRequester("erreur", "l'image n'as pas ete chargé") ; houla le chargement c'est mal passé ... ici dans absolu, je me contente de signaler le probleme , il faudrai enventuellment proposer une soluce
Endif
Case #Image_gadget ; ici c'est si nous voulions recuperer des evenement lié au gadget image, ici pas la peine, on ne fait que l'utiliser comme esclave pour afficher
Case #Button_arriere ; on a cliqué sur le bouton "<---"
if ListSize(image_list())>0 ; si la liste est rempli avec quelque chose, et seulement dans ce cas
state=PreviousElement(image_list()) ; on passe a l'element de la liste precedent celui qu'on regarde
if State=0 ; haa dommage il semble que l'element precedant n'existe pas , on est probablement deja sur le premier element
LastElement(image_list()) ; pas grave on va sauter au dernier element ;o)
Endif
name.s=stringfield(image_list.s(),1,",") ; on met en variable temporaire le nom de l'image de la liste en cours de lecture
taille.s=StringField(image_list.s(),2,",") ; on fait pareil avec la taille
SetGadgetText(#text_label,name.s) ; on en profite pour faire afficher le nom au gadget text, histoire qu'on vois bien le nom dans notre interface
SetGadgetText (#Text_taille,taille.s) ; pareil pour la taille
if LoadImage(#image,chemin_image.s+name.s) <>0 ; si le chargment de notre image se passe bien
ResizeImage(#image,685, 370) ; on redimensionne l'image pour qu'elle puisse entrer dans le gadget image
SetGadgetState(#image_gadget,ImageId(#image)) ; on pose l'image redimensionné dans le gadget image (cool, on peut la voir maintenant :o) )
Else
MessageRequester("erreur", "l'image n'as pas ete chargé") ; houla, il y a du avoir un soucis pour charger l'image
Endif
Endif
Case #Button_avant ; le bouton avant fait la meme chose que le bouton arriere , sauf bien sur le sens de lecture dans notre list sera inversé
if ListSize(image_list())>0
state=NextElement(image_list()) ; si on arrive au dernierelement de la list, on saute au premier
if state=0
FirstElement(image_list())
Endif
name.s=stringfield(image_list.s(),1,",")
taille.s=StringField(image_list.s(),2,",")
SetGadgetText(#text_label,name.s)
SetGadgetText (#Text_taille,taille.s)
if LoadImage(#image,chemin_image.s+name.s) <>0 ; et on peut voir notre nouvelle image
ResizeImage(#image,685, 370) ; en l'ayant bien sur redimensionné aussi
SetGadgetState(#image_gadget,ImageId(#image))
Else
MessageRequester("erreur", "l'image n'as pas ete chargé")
Endif
Endif
EndSelect
; ////////////////////////
Case #PB_Event_CloseWindow ; ici c'est si on a cliqué sur la croix blanche/fond rouge de la fenetre windows pour quitter cela a declenché l'evenement #PB_Event_CloseWindow
Select EventWindow() ; et cette evenement correspond bien notre fenetre
Case #Win ; qui s'appelerio #win
CloseWindow(#Win) ; donc on la ferme reelement :)
Break ; on peut quitter la boucle principale et partir dans les limbes insondable du champ des bits du systeme, retour a la matrice :)
EndSelect
EndSelect
Forever
end
;}
; ************** zone des Procedures *************************
; donc on ouvre une fenetre
Procedure OpenWindow_Win()
If OpenWindow(#Win, 526, 137, 735, 592, "mini viewer pour Dr FLoyd (By Dobro)", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
TextGadget(#Text_0, 195, 30, 365, 40, "Mini viewer pour Dr Floyd") ; on cree un gadget text pour ecrire un titre par exemple
ButtonGadget(#Button_load, 30, 90, 100, 50, "Load image") ; ici on cree un bouton gadget , qui servira pour charger une premiere image
ImageGadget(#Image_gadget, 25, 155, 685, 370, 0, #PB_Image_Border) ; le famaux image Gadget qui recevra l'image chargée..
ButtonGadget(#Button_arriere, 30, 535, 155, 45, "<----") ; un bouton gadget pour pouvoir allez en arriere dans le repertoire choisi et afficher les images se trouvant avant
ButtonGadget(#Button_avant, 545, 535, 155, 45, "--->") ; un bouton gadget pour pouvoir allez en avant dans le repertoire et ainsi afficher les images se trouvant apres celle en cours
TextGadget(#Text_taille, 510, 135, 170, 20, "") ; un gadget text qui recevra et affichera la taille de l'image en cours de visualisation
TextGadget(#Text_label, 360, 135, 125, 20, "nom de l'image") ; un gagdet text qui affichera le nom de l'image en cours de visualisation
; Gadget Fonts
SetGadgetFont(#Text_0, LoadFont(#Font_Text_0, "Microsoft Sans Serif", 14, #PB_Font_HighQuality)) ; parcequ'il faut bien choisir une fonte pour afficher le titre en gros (corp 14)
EndIf
EndProcedure
autre chose, le fait d'avoir une image dans un gadget te garantie qu'elle ne s'effacera pas , si tu met la fenetre a moitée hors des limite de ton ecran ....
le code ci-dessus donne ceci
Dobro- Patient contaminé
- Nombre de messages : 293
Age : 59
Localisation : 43
Date d'inscription : 30/09/2019
Re: PURE BASIC - Le Topic officiel
j'étudierai tout ca plus tard, car en ce WE d'anniversaire j'ai décidé de ne pas coder
"Purebasic , qui je le rappel est un enfant de l'assembleur"
Là j'ai l'impression de passer un cap en programmant en Pure basic du coup
"Purebasic , qui je le rappel est un enfant de l'assembleur"
Là j'ai l'impression de passer un cap en programmant en Pure basic du coup
_______________________________________________________
Re: PURE BASIC - Le Topic officiel
oui hein ?
pour illustrer ce que je dis
voici un code simple en Purebasic
le fameux code basic de test ancien utilisé pour "voir" un basic tourner
sur les vieux 8 bits
et bien voici le meme code en assembleur Fasm
je precise que c'est le resultat renvoyé par le compilateur Purebasic
moi je n'ecris rien... c'est Purebasic qui me fait le code , (il retranscrit le code Basic en sa version assembleur ) ce qui prouve que Purebasic est une Surcouche de FASM
pour faire court, je n'ai pas mis les appels aux librairies et la Data Section ....
pour illustrer ce que je dis
voici un code simple en Purebasic
le fameux code basic de test ancien utilisé pour "voir" un basic tourner
sur les vieux 8 bits
- Code:
For i=32 to 255
a.s=a.s+ chr(i)
Next i
debug a.s
et bien voici le meme code en assembleur Fasm
je precise que c'est le resultat renvoyé par le compilateur Purebasic
moi je n'ecris rien... c'est Purebasic qui me fait le code , (il retranscrit le code Basic en sa version assembleur ) ce qui prouve que Purebasic est une Surcouche de FASM
pour faire court, je n'ai pas mis les appels aux librairies et la Data Section ....
- Code:
PureBasicStart:
;
PUSH dword I_BSSEnd-I_BSSStart
PUSH dword 0
PUSH dword I_BSSStart
CALL _memset
ADD esp,12
PUSH dword 0
CALL _GetModuleHandleW@4
MOV [_PB_Instance],eax
PUSH dword 0
PUSH dword 4096
PUSH dword 0
CALL _HeapCreate@12
MOV [PB_MemoryBase],eax
CALL _SYS_InitString@0
CALL _PB_InitMemory@0
;
;
; For i=32 to 255
MOV dword [v_i],32
JMP _ForSkipDebug1
_For1:
_ForSkipDebug1:
MOV eax,255
CMP eax,dword [v_i]
JL _Next2
; a.s=a.s+ chr(i)
MOV edx,dword [v_a]
PUSH dword [_PB_StringBasePosition]
PUSH edx
CALL _SYS_CopyString@4
MOV edx,[_PB_StringBasePosition]
PUSH edx
PUSH edx
PUSH dword [v_i]
CALL _PB_Chr@8
POP eax
PUSH dword v_a
CALL _SYS_AllocateString4@8
; Next i
_NextContinue2:
INC dword [v_i]
JNO _For1
_Next2:
; debug a.s
;
;
;
;
;
_PB_EOP_NoValue:
PUSH dword 0
_PB_EOP:
CALL _PB_EndFunctions
CALL _SYS_FreeStrings@0
PUSH dword [PB_MemoryBase]
CALL _HeapDestroy@4
CALL _ExitProcess@4
_PB_EndFunctions:
CALL _PB_FreeMemorys@0
RET
Dobro- Patient contaminé
- Nombre de messages : 293
Age : 59
Localisation : 43
Date d'inscription : 30/09/2019
Re: PURE BASIC - Le Topic officiel
voici un petit tuto sur l'utilisation du debugger avec Purebasic
Dobro- Patient contaminé
- Nombre de messages : 293
Age : 59
Localisation : 43
Date d'inscription : 30/09/2019
Re: PURE BASIC - Le Topic officiel
je vais regarder ca des que possible
en attendant je pense que
DesktopScaledX(100)
DesktopScaledY(100)
a résolu mon problème de fontes à taille différentes selon les pc
en attendant je pense que
DesktopScaledX(100)
DesktopScaledY(100)
a résolu mon problème de fontes à taille différentes selon les pc
_______________________________________________________
Re: PURE BASIC - Le Topic officiel
On peut avoir une version de ton proto TD4 qui fonctionne ?
Shaoth- Guéri miraculeux
- Nombre de messages : 2234
Age : 54
Localisation : 92
Date d'inscription : 05/04/2018
Re: PURE BASIC - Le Topic officiel
faut que je le passe 320x240 virtuel (fenetre windows fullscreen), je pense qu'il plante sur certains PC a cause du fullscreen 320x240 pas supporté par toutes les cartes graphiques.
Mais bon y avait rien d'extra à voir, juste un double scrolling test
Mais bon y avait rien d'extra à voir, juste un double scrolling test
_______________________________________________________
Re: PURE BASIC - Le Topic officiel
drfloyd a écrit:je vais regarder ca des que possible
en attendant je pense que
DesktopScaledX(100)
DesktopScaledY(100)
a résolu mon problème de fontes à taille différentes selon les pc
eh bien non... je rechange de pc et paf ma police double de taille sur le nouveau pc....
Je m'en sort pas pour ecrire du texte, c'est de la folie, le truc le plus simple en programmation
Ca doit super connu ce "probleme" en Pure basic, je comprend pas que personne n'ait d'explication simple à donner.
Prof Dobro, au secours, donnez moi le code magique
_______________________________________________________
Re: PURE BASIC - Le Topic officiel
non en fait TU semble avoir un probleme avec ça
perso je n'ai jamais été confronté a ça
tu pourrai pas poster un exemple court qui demontre ce probleme ?
parceque ça sert a rien que je te file un code, si je ne sais pas d'ou viens le probleme
pourquoi t'embetes tu avec du 320x240 ??
c'est vraiment important ??
non parceque le rapport entre une resolution correcte de 1024x768 et 320x240 c'est 3.2
n'y aurai t'il pas la possibilité dans ce cas de bosser en 1024x768 avec des sprites 3.2 fois plus gros ??
perso je n'ai jamais été confronté a ça
tu pourrai pas poster un exemple court qui demontre ce probleme ?
parceque ça sert a rien que je te file un code, si je ne sais pas d'ou viens le probleme
pourquoi t'embetes tu avec du 320x240 ??
c'est vraiment important ??
non parceque le rapport entre une resolution correcte de 1024x768 et 320x240 c'est 3.2
n'y aurai t'il pas la possibilité dans ce cas de bosser en 1024x768 avec des sprites 3.2 fois plus gros ??
Dobro- Patient contaminé
- Nombre de messages : 293
Age : 59
Localisation : 43
Date d'inscription : 30/09/2019
Re: PURE BASIC - Le Topic officiel
non COSMOS est en 640x400 (et si c'est genant je peux le passer en 640x480 si tu penses que c'est plus standard)
(320x240 c'etait pour un test bidon sur un scrolling, oublie)
Donc en fait c'est simple :
Sur un PC donc l'ecran est zoomé a 125% dans les paramétres du bureau (bah oui j'ai la vue qui baisse), et bien la taille des polices dans le jeu est zoomée de bien plus de 25%.... et uniquement la taille des polices, ca fait que le texte devient gros par rapport aux dessins et sprites)
c'est ca que je n'arrive pas à gérer...
Il te fait un bout de code quand même ou tu vois ?
(320x240 c'etait pour un test bidon sur un scrolling, oublie)
Donc en fait c'est simple :
Sur un PC donc l'ecran est zoomé a 125% dans les paramétres du bureau (bah oui j'ai la vue qui baisse), et bien la taille des polices dans le jeu est zoomée de bien plus de 25%.... et uniquement la taille des polices, ca fait que le texte devient gros par rapport aux dessins et sprites)
c'est ca que je n'arrive pas à gérer...
Il te fait un bout de code quand même ou tu vois ?
Dernière édition par drfloyd le Mar 8 Oct 2019 - 15:55, édité 1 fois
_______________________________________________________
Re: PURE BASIC - Le Topic officiel
Encore une fois, pourquoi tu fais pas ta police en "sprites" ? Si tu utilises des polices TrueType, tu es dépendant des polices installées sur la machine de l'utilisateur, et des pilotes de gestion du truetype...
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
en dernier recours oui, mais comme c'est juste pour afficher du texte banal, sans effet....
ma vrai interrogation c'est pourquoi sur un ecran windows zoomé de 25%, le jeu est bien sur zoomé de 25% en mode fenetre (normal!) mais les polices genre de 40%.... Ca m'empêche de dormir quasiment Ca ne devrait pas exister.
ma vrai interrogation c'est pourquoi sur un ecran windows zoomé de 25%, le jeu est bien sur zoomé de 25% en mode fenetre (normal!) mais les polices genre de 40%.... Ca m'empêche de dormir quasiment Ca ne devrait pas exister.
_______________________________________________________
Re: PURE BASIC - Le Topic officiel
Tu n'avais pas (dé)coché des trucs dans les paramètres concernant le rescale ?
Page 5 sur 12 • 1, 2, 3, 4, 5, 6 ... 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 5 sur 12
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum