Page 1 sur 2
Les objets en PureBasic
Publié : dim. 27/mai/2012 0:11
par Warkering
Rebonjour !
Il y a longtemps que je n'ai pas posté ici ! Ça fait plaisir de retrouver la petite bande habituelle du forum français !
J'aurais une petite question pour vous cependant, afin de marquer ce retour inattendu.
Je n'ai jamais pris la peine de vérifier cette information, ayant toujours utiliser une seule grande énumération dans laquelle je me perdais.
Si nous créons un objet Image à l'emplacement 0 de l'index, peut-on créer un objet différent, par exemple un Sprite, à l'emplacement 0 ?
En clair, est-ce qu'il n'y a qu'un seul grand index, ou bien chaque catégorie d'objet possède leur propre index ?
Je vous remercie d'avance !
Re: Les objets en PureBasic
Publié : dim. 27/mai/2012 10:07
par Backup
oui !
tu peux faire
Code : Tout sélectionner
enumeration
image.i
fenetre.i
endenumeration
enumeration
sprite.i
sprite1.i
endenumeration
dans le meme listing ...
perso , je n'utilise pas ceci , je prefere une seule enumeration !
je trouve que c'est plus clair de tout regrouper.. mais il y a vraiment 2 ecoles pour ça
certains préfèrent séparer par genre :
pour ne pas se perdre , la solution c'est :
Code : Tout sélectionner
enumeration
; *** fenetre <<<<<<<<<< ajouter des commentaires ou des
;- *** fenetre <<< signets :comme ça ça apparait dans les onglets
win1
win2
win3
;*** sprite
sprite1
sprite2
;*** donnee
x.i
y.i
z.i
endenumeration
style enumeration pour les Fenetre , pour les Gadget , pour les donnée perso , etc ...

Re: Les objets en PureBasic
Publié : dim. 27/mai/2012 10:14
par blendman
Après, on peut séparer en plusieurs énumérations en utilisant #PB_Compiler_EnumerationValue et elles se suivront :
Code : Tout sélectionner
enumeration
#window ; vaut 0
#image1 ; vaut 1
endenumeration
Enumeration #PB_Compiler_EnumerationValue
#sprite1 ; vaut 2
endenumeration
Re: Les objets en PureBasic
Publié : dim. 27/mai/2012 10:19
par case
ou
Code : Tout sélectionner
enumeration
#blah
#bleh
endenumeration
enumeration
#blah2=12
#bleh2
endenumeration
qui donnerais
#blah=0
#bleh=1
#blah2=12
#bleh2=13
Re: Les objets en PureBasic
Publié : dim. 27/mai/2012 10:22
par dayvid
blendman a écrit :Après, on peut séparer en plusieurs énumérations en utilisant #PB_Compiler_EnumerationValue et elles se suivront :
Code : Tout sélectionner
enumeration
#window ; vaut 0
#image1 ; vaut 1
endenumeration
Enumeration #PB_Compiler_EnumerationValue
#sprite1 ; vaut 2
endenumeration
Exacte, c'est ce que je fais moi et c'est bien pratique
Edit: Question
Code : Tout sélectionner
enumeration
image.i
fenetre.i
endenumeration
enumeration
sprite.i
sprite1.i
endenumeration
Ceci ne marche pas cher moi, on ne peut mettre que des constantes dans les enumerations non ?
Re: Les objets en PureBasic
Publié : dim. 27/mai/2012 10:41
par Ar-S
case a écrit :ou
Code : Tout sélectionner
enumeration
#blah
#bleh
endenumeration
enumeration
#blah2=12
#bleh2
endenumeration
Case,
#bleh=
1
Pour ce cas je pense qu'il est plus 'propre' de faire :
Code : Tout sélectionner
enumeration
#blah
#bleh
endenumeration
enumeration 12
#blah2
#bleh2
endenumeration
Qui donne aussi
#blah=0
#bleh=1
#blah2=12
#bleh2=13
P.s : Content de te lire Warkering
Re: Les objets en PureBasic
Publié : dim. 27/mai/2012 11:02
par Ar-S
dayvid a écrit :
Ceci ne marche pas cher moi, on ne peut mettre que des constantes dans les enumerations non ?
Lis la définition d'enumération dans la doc...
Re: Les objets en PureBasic
Publié : dim. 27/mai/2012 11:39
par Fred
Il vaut mieux separer les enumeration et recommencer à 0 a chaque fois, car sinon il y arua de la place perdue:
Code : Tout sélectionner
Enumeration
#Sprite1
#Sprite2
#Window1
#Window2
#Menu1
#Menu2
EndEnumeration
Ici, les fenetres commenceront à '2', donc les slots 0 et 1 seront inutilisés (mais alloués quand meme en memoire)
Les menus commenceront à '4', donc les slots 0, 1, 2, 3 seront inutilisés (mais alloués quand meme en memoire)
etc.
C'est pas du tout optimal, surtout quand le nombre d'objet augmente.
Re: Les objets en PureBasic
Publié : dim. 27/mai/2012 11:55
par Backup
Fred a écrit :
Ici, les fenetres commenceront à '2', donc les slots 0 et 1 seront inutilisés (mais alloués quand meme en memoire).
ha... peut etre un truc a ajouter dans la doc ,
je ne pensais pas qu'il y est un allocation des Constantes inexistantes ...
dans ce cas effectivement ..
Re: Les objets en PureBasic
Publié : dim. 27/mai/2012 12:21
par comtois
Dobro a écrit :Fred a écrit :
Ici, les fenetres commenceront à '2', donc les slots 0 et 1 seront inutilisés (mais alloués quand meme en memoire).
ha... peut etre un truc a ajouter dans la doc ,
je ne pensais pas qu'il y est un allocation des Constantes inexistantes ...
dans ce cas effectivement ..
http://www.purebasic.com/french/documen ... jects.html
Re: Les objets en PureBasic
Publié : dim. 27/mai/2012 15:07
par Backup
j'ai du mal avec la notion d'emplacement ....
lorsque je regarde comment Pb transforme un createimage en ASS
et si j'en crois la Doc
Code : Tout sélectionner
; CreateImage(2, 640, 480) ; Crée une image à l'emplacement 2
PUSH dword 480
PUSH dword 640
PUSH dword 2
CALL _PB_CreateImage_UNICODE@12
doc :
si vous utilisez la valeur 0 pour votre premier objet et la valeur 1000 pour votre deuxième objet, il y aura 1001 index de disponibles et 999 seront inutilisés, ce qui n'est pas très efficace (gâchis de mémoire vive).
cela sous entends , qu'il y a un emplacement pré-reservé ?
dans ce cas , la Ram est donc déja prise non ?
ou bien "l'emplacement" est juste un indice , dans ce cas , aucune importance de commencer a 1000
ou bien si j'en crois la doc , l'emplacement est important, dans ce cas , on est forcement limité au nombres "d'emplacement"
bref : Definir "emplacement" .... ??
de plus ... si emplacement est pré-reservé , et donc limité dans son nombre ...
comment est geré le #pb_any qui renvoie les 3/4 du temps , un nombre énorme comparé a no petit 1000 ??
beaucoup de questions n'est 'il pas ?
Re: Les objets en PureBasic
Publié : dim. 27/mai/2012 15:14
par G-Rom
si #pb_any est utilisé , tu as un pointeur en retour
sinon , pour une fenetre tu as en retour l'équivalent d'un windowID() , ca ne renvois pas un emplacement dans une table quelquonque :
Code : Tout sélectionner
A = OpenWindow(0,0,0,1,1,"")
B = OpenWindow(#PB_Any,0,0,1,1,"")
Debug A ; = WindowID(0)
Debug B ; = Pointeur sur l'objet
Re: Les objets en PureBasic
Publié : dim. 27/mai/2012 16:16
par Backup
oui
c'est cette phrase , et celle de Fred , que je met a l'index
si vous utilisez la valeur 0 pour votre premier objet et la valeur 1000 pour votre deuxième objet, il y aura 1001 index de disponibles et 999 seront inutilisés, ce qui n'est pas très efficace (gâchis de mémoire vive).
c'est surtout le rouge, que j'ai du mal a comprendre ...
je croyais que la Ram sous windows etait dynamique ( d'ou fragmentation )
ce discours tiendrai peut etre si la Ram etait geré par page .... mais l'est t'elle encore de nos jours ..?
Re: Les objets en PureBasic
Publié : dim. 27/mai/2012 19:52
par Warkering
Merci de vos réponses.
J'utilisais la méthode de Blendman. Dorénavant, ce sera la méthode Fred !
Et oui Dobro, la mémoire est toujours paginée de nos jours, par quatre mégaoctets je crois bien. Ce serais même un peu insensé de nos jours de gérer huit gigaoctets de mémoire vive autrement.
Re: Les objets en PureBasic
Publié : dim. 27/mai/2012 20:53
par dayvid
Content de te revoir parmis nous Warkering
