[RESOLU] Utiliser des Images sans IncludeBinary, possible ?

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
kerkael
Messages : 97
Inscription : mer. 03/sept./2008 21:08

[RESOLU] Utiliser des Images sans IncludeBinary, possible ?

Message 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 !
Dernière modification par kerkael le ven. 12/sept./2008 11:52, modifié 2 fois.
Cls
Messages : 620
Inscription : mer. 22/juin/2005 8:51
Localisation : Nantes

Message 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 ^^)
kerkael
Messages : 97
Inscription : mer. 03/sept./2008 21:08

Message 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 :(
kerkael
Messages : 97
Inscription : mer. 03/sept./2008 21:08

Message 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.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message 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 !! :)
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message 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"
Cls
Messages : 620
Inscription : mer. 22/juin/2005 8:51
Localisation : Nantes

Message 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
Répondre