Peut-on utiliser les lumieres en programmant notre jeu ?

Général

Sky_Nex

il y a 4 ans

Bonsoir j'ai reçu ma Gamebuino Meta il y a peu mais je suis vraiment tombé sous le charme des lumières au derriére de la console et j aimerais bien savoir si il est possible de les utiliser en programmation et si oui comment.

Merci d'avance !

DavTheDev

NEW il y a 4 ans

Bien sûr!

Pour utiliser les LEDs, ce sont les API gb.lights qui entrent en action.
Si elles ne sont pas facilement visibles dans la documentation, elles correspondent syntaxiquement aux API correspondantes gb.display. Sauf que, à la place de colorer des pixels, on allume les fameuses lumières!

Des exemples :

Remplir toutes les lumières en jaune :
gb.lights.fill(YELLOW);

Eteindre toutes les lumières :
gb.lights.clear();

Allumer les 2 lumières du bas en blanc:
gb.lights.drawPixel(0, 3,WHITE);
gb.lights.drawPixel(1, 3, WHITE);

Dans ces instructions, le premier argument est la colonne (0 = gauche, 1 = droite), et le deuxième est la rangée (de haut en bas; il y a 4 LEDs de chaque côté soit 8 en tout).

Sky_Nex

NEW il y a 4 ans

Merci beaucoup !! Très claire la réponse. Je vais m'amuser et causer pas mal de crises d'épilepsie x)

Steph

NEW il y a 4 ans

Hello,

Voilà une autre piste pour t'amuser davantage...

En fait, allumer et éteindre les LEDs de la META revient simplement à dessiner des pixels sur une image 2x4 qui correspond à la grille de LEDs. Cette image est accessible via l'API gb.lights :

 gauche         droite      gb.lights
 +-------------------+         0 1
 | o               o |         □ □ 0
 | o   les LEDs    o |   <=>   □ □ 1
 | o  sur la META  o |         □ □ 2
 | o               o |         □ □ 3
 +-------------------+

Tu peux dessiner sur gb.lights exactement de la même manière que tu le fais sur gb.display.
Autrement dit, tu peux tout à fait lui appliquer une animation à partir d'une spritesheet !

Prenons l'exemple de la spritesheet suivante, composée de 12 images clés de 2x4 :

En l'animant à raison de 12 frames par seconde, on obtient ceci :

Les images ci-dessus sont grossies 10 fois pour une meilleure lecture de mon propos... mais en reprenant la même spritesheet à l'échelle 1:1, tu peux utiliser l'utilitaire Image Transcoder pour convertir cette spritesheet en un tableau d'entiers et l'exploiter ensuite dans ton code C++.

Voici un petit exemple qui illustre comment animer les LEDs de la META à partir du motif ci-dessus.

On va utiliser le mode d'affichage en couleurs indexées de la META (la spritesheet ci-dessus utilise la palette officielle Gamebuino). Pour placer la console dans ce mode d'affichage au lancement de l'exécution, tu dois créer un fichier nommé config-gamebuino.h à la racine de ton projet et y inscrire la ligne suivante :

#define DISPLAY_MODE DISPLAY_MODE_INDEX_HALFRES

Ensuite, crée le croquis principal (par exemple led-animation.ino) et inscris-y les lignes suivantes :

#include <Gamebuino-Meta.h>

const uint8_t IMAGE_DATA[] = {
2,    // frame width
4,    // frame height
0x0c, // number of frames (lower byte)
0x00, // number of frames (higher byte)
2,    // animation speed
0x7,  // transparent color
1,    // indexed color mode
0xcc, 0x00, 0x00, 0x00, // frame  1/12
0xdd, 0xcc, 0x00, 0x00, // frame  2/12
0x11, 0xdd, 0xcc, 0x00, // frame  3/12
0x00, 0x11, 0xdd, 0xcc, // frame  4/12
0x00, 0x00, 0x11, 0xdd, // frame  5/12
0x00, 0x00, 0x00, 0x11, // frame  6/12
0x00, 0x00, 0x00, 0x00, // frame  7/12
0x00, 0x00, 0x00, 0x00, // frame  8/12
0x00, 0x00, 0x00, 0x00, // frame  9/12
0x00, 0x00, 0x00, 0x00, // frame 10/12
0x00, 0x00, 0x00, 0x00, // frame 11/12
0x00, 0x00, 0x00, 0x00  // frame 12/12
};

Image image(IMAGE_DATA);

void setup() {
    gb.begin();
}

void loop() {
    gb.waitForUpdate();
    gb.lights.drawImage(0, 0, image);
}

Utilise la barre de défilement pour visualiser l'ensemble du code dans le bloc ci-dessus (les gens n'y pensent pas toujours...)

Tu peux ensuite compiler le croquis et téléverser le code machine sur ta META... et tu devrais voir tes LEDs s'animer comme ceci :


Note qu'il est tout à fait possible de faire la même chose dans le mode d'affichage par défaut (RGB565), mais les couleurs seront dans ce cas codées sur des entiers 16 bits (donc 2 octets seront nécessaires pour encoder la couleur de chaque pixel).

Tu trouveras des explications détaillées sur la manière d'utiliser les images pour les animer dans cet atelier :

Ajoutez des images à vos jeux

J'espère que ça pourra t'aider à mieux exploiter les LEDs de ta META ;-)

DavTheDev

NEW il y a 4 ans

En parlant de mode de couleur, justement :

Peut-on faire fonctionner l'écran en 16 couleurs indexées (utile pour la haute résolution avec la méthode officielle) et éclairer les LEDs en RGB565 avec les APIs fournies?

Steph

il y a 4 ans

Non... je crois que ça n'est pas possible... si le mode d'affichage fixé dans config-gamebuino.h est le mode indexé, toutes les images fonctionneront dans ce mode, donc gb.display et gb.lights aussi.

Steph

NEW il y a 4 ans

DavTheDev DavTheDev

Non... je crois que ça n'est pas possible... si le mode d'affichage fixé dans config-gamebuino.h est le mode indexé, toutes les images fonctionneront dans ce mode, donc gb.display et gb.lights aussi.