Page 1 sur 1

[RESOLU] Utiliser des Images sans IncludeBinary, possible ?

Publié : ven. 12/sept./2008 10:39
par kerkael
Bonjour,

Je souhaite utiliser des images assez nombreuses dans une fenêtre, pour faire une interface graphique pour un jeu (me faudra quelques années, je pense).
Mais les images sont en très grand nombre.

Est-ce que je suis obligé de faire du IncludeBinary de chaque image, sachant que :
  • 1. IncludeBinary n'accepte pas de variable, donc il me faut taper le nom de chaque image.
  • 2. Les images seront incluses dans l'exécutable, ce qui en augmente considérablement la taille.
  • 3. Comme les images seront dans l'Exe, personne ne pourrait les modifier, adapter, ni en ajouter, ce qui est dommage.
Mon idée, c'est de faire un fichier contenant un tableau du genre :
titre, nom, bonus, couts, imagePath
Et de pouvoir appeler chaque élement (des tuiles de mon jeu de plateau) à partir de ce tableau.

Merci de votre aide les aminches !

Publié : ven. 12/sept./2008 11:29
par Cls
Salut kerkael et bienvenue !

Oui c'est tout à fait possible. Il suffit de livrer ton jeu avec l'EXE et un répertoire contenant tes images ("img" par exemple :roll:). Les installeurs proposent surement ça (ou tu fais ton propre installeur).

Viens ensuite la question du chargement. Tu as deux solution : soit toutes les charger au lancement de l'appli, soit les charger uniquement lorsqu'elles doivent être affichées. C'est à toi de voir en fonction du nombre d'images que tu as.

Quoiqu'il en soit, il est toujours possible de stocker les données sur les images dans un fichier comme tu l'as proposé. Si je ne me trompe pas, tu veux que les joueurs puissent créer leur propre "skin" du jeu ? Cette solution est la meilleure pour ça, je pense.

(Je complète tout ca tout à l'heure, je dois y aller ^^)

Publié : ven. 12/sept./2008 11:39
par kerkael
Merci

Ce qui me gêne c'est la syntaxe que je peux utiliser pour ne pas avoir à inclure les binaires, surtout parce que je ne peux pas passer le ImagePath$ en variable pour IncludeBinary.

En fait j'ai utilisé la syntaxe de l'éditeur visuel qui ne m'a rien proposé d'autre :(

Publié : ven. 12/sept./2008 11:50
par kerkael
Okay, j'ai trouvé. Savoir que c'était possible m'a incité à chercher d'une manière différente.

L'éditeur visuel me donnait ça:

Code : Tout sélectionner

Enumeration
  #Image0
EndEnumeration

;- Image Plugins
UsePNGImageDecoder()

;- Image Globals
Global Image0

;- Catch Images
Image0 = CatchImage(0, ?Image0)

;- Images
DataSection
  Image0:
  IncludeBinary "Images\modules1\cg1.png"
EndDataSection 
Avec une utilisation par:

Code : Tout sélectionner

ImageGadget(#Image0, 10, 80, 250, 250, Image0)
L'aide m'aura fourni une autre solution :

Code : Tout sélectionner

Enumeration
  #Image1
EndEnumeration

LoadImage(#Image1,"Images\modules1\ci1.png")

ImageGadget(#Image1, 10, 80, 250, 250, ImageID(#Image1))
Du coup j'évite l'Include Binary.

Publié : ven. 12/sept./2008 11:55
par Backup
kerkael a écrit :Merci

Ce qui me gêne c'est la syntaxe que je peux utiliser pour ne pas avoir à inclure les binaires, surtout parce que je ne peux pas passer le ImagePath$ en variable pour IncludeBinary.

En fait j'ai utilisé la syntaxe de l'éditeur visuel qui ne m'a rien proposé d'autre :(
ben c'est normal !! :)

includebinary "pose" le fichier binaire par rapport a un Label (une adresse memoire)

Code : Tout sélectionner

DataSection
    Logo: IncludeBinary "Logo.bmp"
  EndDataSection
dans cette exemple l'image "Logo.bmp" est posée suite au label "Logo:"

c'est grace a ce label (son adresse memoire) qui repere le debut de l'image que l'on va pouvoir reussir a la réutilisée !!

si il y avait possibilité de faire :

for t=1 to 255
Logo: IncludeBinary str(t)+".bmp"
next t

il faudrai aussi la possibilité de changer le label genre

for t=1 to 255
Logo(t): IncludeBinary str(t)+".bmp"
next t

ce serai bien pratique, mais je supose que Fred , ne dois deja plus avoir beaucoup de cheveux :lol:

du coup lorsqu'on a beaucoup de fichier on fait

Code : Tout sélectionner

DataSection
    Logo: IncludeBinary "Logo.bmp"
    Logo2: IncludeBinary "Logo2.bmp"
    Logo3: IncludeBinary "Logo3.bmp"
  EndDataSection

pour info j'avais fait un synthetiseur Vocale qui utilise ce principe
avec plus de 1465 sons Mp3 differents !! :)

Publié : ven. 12/sept./2008 12:44
par djes
Dobro a écrit : si il y avait possibilité de faire :

for t=1 to 255
Logo: IncludeBinary str(t)+".bmp"
next t

il faudrai aussi la possibilité de changer le label genre

for t=1 to 255
Logo(t): IncludeBinary str(t)+".bmp"
next t

ce serai bien pratique, mais je supose que Fred , ne dois deja plus avoir beaucoup de cheveux :lol:
Même si je préfère le chargement dynamique, tu devrais suggérer ça à Fred. Il suffirait d'inclure une directive pour faire des boucles, comme le permet déjà Fasm : http://flatassembler.net/docs.php?article=manual#2.3.5
Par exemple :

Code : Tout sélectionner

  REPT 4 compteur
    MON_LABEL%compteur: IncludeBinary "fichier%compteur.png"
  ENDREPT
Résultat :

Code : Tout sélectionner

MON_LABEL1: IncludeBinary "fichier1.png"
MON_LABEL2: IncludeBinary "fichier2.png"
MON_LABEL3: IncludeBinary "fichier3.png"
MON_LABEL4: IncludeBinary "fichier4.png"

Publié : ven. 12/sept./2008 13:10
par Cls
Perso quand j'ai beaucoup d'images j'utilise ce code pour charger les images :

Includes :

Code : Tout sélectionner

DataSection
  Image0:
    IncludeBinary "F:\img\0.jpg"
  Image1:
    IncludeBinary "F:\img\1.jpg"  
EndDataSection
Marco :

Code : Tout sélectionner

Macro incImg(NUMERO)
  Global _#NUMERO = CatchImage(#PB_Any, ?Image#NUMERO)
EndMacro
Et l'utilisation :

Code : Tout sélectionner

incImg(1)
Les images sont alors disponibles via l'identifiant _X (ex : _0 et _1 dans le cas ci dessus).

En espérant que ça te donne des pistes pour ton projet.

Cls