Cliquer sur un objet

Dans ce troisième chapitre, vous verrez comment ajouter des mécaniques de point and click à vos jeux, à l'aide des screens de Ren'Py et d'une utilisation plus poussée des variables.

Dans cette première étape, nous allons utiliser un screen pour afficher un objet sur lequel on pourra cliquer. Vous pouvez récupérer ce script pour suivre avec moi : j'ai repris ce que nous avions écrit au début de la formation, avec quelques modifications.

define m = Character("Marvin", color="#ffc8c8")
define a = Character("Astride", color="#c8c8ff")

label start:
    scene ecole with dissolve
    m "J'aimerais tant créer un visual novel..."

    show astride with dissolve
    a "Je peux t'aider si tu veux !"
    a "Pour écrire ton histoire, il te faudrait un carnet. Je crois que j'ai oublié le mien au pied de l'arbre..."

label livre_recupere:
    a "Félicitations, tu l'as retrouvé !"
Marvin

Mais c'est quoi un screen, au juste ?

Astride

Ce sont tous les éléments d'interface que l'on peut ajouter en plus des personnages et des décors.

Rémi

Par exemple, l'écran-titre est un screen, et le menu de sauvegarde aussi.

Marvin

Donc je pourrai les changer en allant dans les screens ? Génial !

Un tout premier screen

Vous pouvez ajouter votre screen à l'intérieur de screens.rpy ou créer votre propre fichier, nommé myscreens.rpy par exemple.

screen texte_coucou:
    text "Coucou !"

Pour afficher le screen, nous avons le choix entre deux méthodes : show screen et call screen :

  • show n'interrompt pas le jeu, et affiche le screen en parallèle du reste.
  • call bloque le jeu dans ce screen tant que l'on ne fait pas d'action qui nous fasse sortir.

Pour ce petit texte, nous allons utiliser show.

a "Je peux t'aider si tu veux !"
show screen texte_coucou
a "Pour écrire ton histoire, il te faudrait un carnet. Je crois que j'ai oublié le mien au pied de l'arbre..."

Screen texte affiché Le texte s'affiche bien dans le coin de l'écran !

On ne le voit presque pas... On peut améliorer cela en lui ajoutant quelques propriétés. Ces deux écritures produisent le même effet :

screen texte_coucou:
    text "Coucou !" xpos 20 ypos 20 size 40

screen texte_coucou:
    text "Coucou !":
        xpos 20
        ypos 20
        size 40

Screen texte modifié

Pas mal, mais on peut encore faire mieux ! Affichons notre texte dans une frame : c'est une fenêtre avec un fond et une bordure.

screen texte_coucou:
    frame xpos 20 ypos 20:
        text "Coucou !" size 40

screen texte_coucou:
    frame:
        xpos 20
        ypos 20
        text "Coucou !":
            size 40

Screen texte modifié Eh ben voilà ! Que demande le peuple ?

Je pense que vous comprenez le principe maintenant. Vous voyez que créer une interface, ça consiste souvent à trouver la meilleure façon de mettre des trucs dans d'autres. Passons au vif du sujet : notre livre !

Créer une imagebutton

Une imagebutton, comme son nom l'indique, est une image qui peut avoir le comportement d'un bouton. Nous allons afficher un livre au pied de l'arbre que l'on peut ramasser. Je vais utiliser ce fichier :

Icône de livre Provient de ce pack.

Créons le screen contenant notre imagebutton :

screen livre:
    imagebutton:
        xpos 190
        ypos 450
        idle "livre.png"

Remarquez que je donne le nom de l'image dans idle, qui signifie « quand l'objet n'est pas survolé par la souris ». C'est son état par défaut, en quelque sorte. Vous pourriez donner une nouvelle image lorsque le livre est survolé avec hover, par exemple. Toutes les possibilités sont listées dans la documentation des imagebuttons.

Appelons le screen avec call, pour bloquer le déroulement du jeu :

    a "Pour écrire ton histoire, il te faudrait un carnet. Je crois que j'ai oublié le mien au pied de l'arbre..."
    call screen livre

label livre_recupere:
    a "Félicitations, tu l'as retrouvé !"

Livre affiché en jeu

Le jeu ne continue pas une fois le livre affiché, ce qui est normal. Par contre, nous avons un souci : l'image est bien trop grande !

Ren'Py possède des styles mais ils ne fonctionnent pas partout. En l'occurrence, nous aurions besoin du style size, mais il ne peut pas s'appliquer aux boutons... Nous devons donc soit redimensionner le fichier directement, soit recourir à une animation custom.

screen livre:
    imagebutton:
        xpos 190
        ypos 450
        idle "livre.png"
        at custom_zoom

transform custom_zoom:
    zoom 0.2

Livre redimensionné en jeu

C'est mieux ! Nous n'avons plus qu'à ajouter une action à effectuer lorsqu'on clique sur le livre :

screen livre:
    imagebutton:
        xpos 190
        ypos 450
        idle "livre.png"
        at custom_zoom
        action Jump("livre_recupere")

Vous pouvez effectuer plusieurs actions à la fois. Par exemple, avant de jump, on peut aussi cacher notre premier screen.

action [Hide("texte_coucou"), Jump("livre_recupere")]

Toutes les possibilités sont listées dans la documentation des actions.

Dans l'étape suivante, nous allons afficher un inventaire et y ajouter le livre !