Petite question Glulx

Hello,

Pourriez vous m’aider avec ceci ?

Cette fonction :

glk_image_draw(gg_mapwin, 1, 0, 0);

permet d’afficher une image (notée 1) dans la fenêtre idoine.

Est il possible que les dimensions de l’image occupent 100% de la fenêtre ?

Merci d’avance pour vos réponses.

JB

désolé, je n’ai jamais utilisé cela. Mais cela m’intéresserait de savoir, car on pourrait utiliser cela pour « lieux communs », on a d’ailleurs un effet similaire dans « city of secrets » car cela affiche toujours le menu graphique sur la gauche à la hauteur maximale, en rééchantillonnant dans une bonne qualité les images.
Peut-être une piste ici ?

eblong.com/zarf/glk/glk-spec-070_7.html#s.2
(ou plus haut dans la page)

Je vois également que cette page
members.aol.com/doepage/glkdunces2.htm

présente une fonction qui pourrait correspondre : glk_image_draw_scaled

Yes !

Ok, alors on peut afficher des images scaled, ce qui nous permet d’avancer d’un pas.

Ce qu’il faudrait donc c’est récupérer la taille de la fenetre actuelle et faire un ratio avec la dimension de l’image.

Donc, la question du moment est donc : comment connaître la taille de la fenêtre ?

JB

Ok j’ai ma réponse :

glk_window_get_size

Donc, on a de quoi faire le nécessaire :slight_smile: merci Eric

JB

Et comme chuis cool :

[Affiche k graph_width graph_height;
if (gg_mapwin) {} else {
gg_mapwin = glk_window_open(gg_mainwin, (winmethod_Left+winmethod_Proportional),100, wintype_Graphics, GG_MAPWIN_ROCK); }
!glk_image_draw(gg_mapwin, k, imagealign_InlineCenter, 0);
glk_window_get_size(gg_mapwin, gg_arguments,
gg_arguments+WORDSIZE);
graph_width = gg_arguments–>0;
graph_height = gg_arguments–>1;

glk_image_draw_scaled(gg_mapwin, k, 0, 0,graph_width,graph_height);
];

Affiche(k); pour afficher vos images en pleine fenetre, quelque soit la taille de votre lecteur :slight_smile:

Un petit résultat sympa :

ginko968.free.fr/paris.blb

Il suffit de cliquer sur l’image pour la changer.

Vous pouvez redimensionner l’interpreteur et cliquer, et hop, l’image revient à nouveau en pleine fenetre !

JB

ps : je ne suis pas sur une version images de filaments :slight_smile:

Whaou ! Moi qui désespère de trouver comment utiliser la souris sous glulxe… Peux-tu m’expliquer comment tu as fait ? merci

pas mal du tout !

Reste à faire :

  • s’arranger pour que l’image garde le bon ratio, en effet si on étire de trop l’interpréteur, l’image sera déformée.
  • éventuellement faire un redimensionnement dynamique de l’image, qui se déclenche dès que l’on a fini de changer la taille de l’interpréteur (on a cela dans « city of secrets »)
  • nous fournir le détail du code de cette merveille :slight_smile:

ps : j’espérais que c’était des photos d’une autre « Paris » :wink:
ps2 : en fait non je n’espérais pas, mais si on veut que le grand public apprenne à installer lui-même un interpréteur il faut les motiver…

Voici la source :

ginko968.free.fr/paris.inf

En ce qui me concerne, je suis arrivé à faire ce dont j’avais besoin pour MON PROJET SECRET. Donc j’en coderai pas plus pour le moment dans ce sens là.

Concernant la conservation du ratio, c’est assez simple en récupérant la taille de l’image et en faisant un ratio.

Concernant le réarrangement dynamique, je pense à une solution efficace mais un peu brutale pour un enfant du « tour par tour » comme moi : tout simplement on active une fonction Glulx de temps réel et on lance « Affiche(); » en permanence.

En marge de MON PROJET SECRET j’aimerais développer un petit kit de développement qui permettrait de faire faceilement des jeux genre Myst et avec tout ca on a presque l’essentiel.

A+

JB

J’ajoute une petite précision pour Yoruk : la souris ne fonctionne que dans des fenêtres graphiques (ou d’un autre type, mais en tout cas, pas dans la fenêtre d’input) - et hop, tu as gagné 3 heures de vie.

JB

Bon en fait c’est plus simple que ca, il vous suffit dans le code source fourni de remplacer la routine suivante :

[ HandleGlkEvent ev context abortres newcmd cmdlen;
switch (ev–>0) {
evtype_MouseInput:
glk_request_mouse_event(gg_mapwin);

     if (ev-->2 >= 0 && ev-->2 < 1000
        && ev-->3 >= 0 && ev-->3 < 1000) {
        glk_cancel_line_event(gg_mainwin, 0);
        newcmd = "n";            
        cmdlen = PrintAnyToArray(abortres+WORDSIZE,
           INPUT_BUFFER_LEN-WORDSIZE, newcmd);
        abortres-->0 = cmdlen;
        return 2;

     }
     if (ev-->2 >= 1 && ev-->2 < 2
        && ev-->3 >= 1 && ev-->3 < 2) {
          glk_cancel_line_event(gg_mainwin, 0);
                newcmd = "choix2";            
                cmdlen = PrintAnyToArray(abortres+WORDSIZE,
                   INPUT_BUFFER_LEN-WORDSIZE, newcmd);
                abortres-->0 = cmdlen;
        return 2;
     }     
    evtype_Redraw, evtype_Arrange: 
    Affiche(1);

}
];

A la place de Affiche(1); à la fin, il faut mettre Affiche(k) avec k correspondant à l’image en cours.

Je vous uploade à nouveau le paris.blb si vous voulez une démo

JB

:smiley: :smiley: :smiley: :smiley:

Une des raisons pour laquelle je souhaiterait coder une aventure point and click sous Inform, c’est que je vais pouvoir profiter de la bonne gestion des lieux et objets (programmation facilitée, pas besoin d’apprendre à utiliser un autre logiciel) d’Inform. De plus, les jeux Inform sont compatibles avec toutes les plateformes existantes, ce qui est assez intéressant. Pour finir, je n’avais pas trouvé de logiciel qui me plaise pour créer de bonnes aventures.