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

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

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 :)