il y a 5 ans
Bonjour à tous,
Je me casse un peu la tête sur quelque chose de pas trop difficile je pense :D J'ai envie de faire un "tir" en utilisant la croix directionnelle.
Quand j'appuie sur droite, cela lance un petit carré vers la droite. Et ainsi de suite sur les 4 directions.
Pour l'instant j'ai fais ça :
#include <Gamebuino-Meta.h>
int positionX = 40;
void setup() {
gb.begin();
}
void loop() {
while (!gb.update());
gb.display.clear();
gb.display.fillRect(positionX, 32, 1, 1);
if (gb.buttons.pressed(BUTTON_RIGHT)) {
positionX = positionX + 1;
gb.sound.playOK();
gb.lights.drawPixel(1, 1, WHITE);
}
}
Mais cela fait bouger le carré de 1 à chaque pression sur la touche droite. Moi je souhaite que le carré parte d'un coup, avec une seule pression sur la touche droite (et pas à chaque pression).
Si je sors positionX = positionX + 1;
du if (gb.buttons.pressed(BUTTON_RIGHT)) {}
le carré part tout seul vers la droite au lancement du jeu :/
Si vous avez des conseils je suis preneur !
Merci
NEW il y a 5 ans
Le code est bon mais il faut utiliser la fonction gb.buttons.repeat()
qui est "non bloquante" (faite pour les appuis maintenus, au contraire de la fonction gb.buttons.pressed()
que tu utilises ici).
Autrement tu peux abréger positionX = positionX + 1;
en positionX++;
(incrémentation de 1).
NEW il y a 5 ans
Merci pour ta réponse ! L'effet est mieux avec gb.buttons.repeat()
mais je souhaite que le carré parte dans la direction avec seulement une seule pression sur la touche. Sans maintenir le doigt sur la touche :)
NEW il y a 5 ans
The idea is to store in a variable where you are going currently. For example you could do something like this:
int8_t direction = -1; // no direction // 0 for right // 1 for down // etc. void loop() { if (gb.buttons.pressed(BUTTON_RIGHT)) { direction = 0; // right } switch(direction) { case 0: positionX++; break; case 1: // walk down break; } gb.display.fillRect(positionX, 32, 1, 1); }
NEW il y a 5 ans
Oui et si tu as plusieurs tirs, tu dois faire un tableau avec les directions des tirs respectifs et à chaque cycle, tu balayes le tableau et tu incrémente chaque position selon sa direction.
NEW il y a 5 ans
Ok merci pour vos retours ! Je pensais pas que c'était si "compliqué" :)
Aurélien Rodot
il y a 5 ans
Tu vas devoir stocker la position de ton "carré" en cours de vol, cf PONG dans l'Académie. Tu peux ajouter une variable pour stocker s'il est actif ou non. Lorsque tu tires, tu l'actives et du mets ses variables de vitess vx et vy de sorte à ce qu'il parte dans la bonne direction. Dès qu'il sort de l'écran ou qu'il touche un obstacle, tu le désactives.
C'est beaucoup plus simple si tu choisis de n'en n'avoir qu'un à la fois. Dans un second temps, Si tu veux pouvoir en avoir plusieurs qui existent en même temps, tu peux continuer les tutos de l'académie jusqu'à 202 attrap'oeuf pour voir comment utiliser les tableaux :)
NEW il y a 5 ans
Tu vas devoir stocker la position de ton "carré" en cours de vol, cf PONG dans l'Académie. Tu peux ajouter une variable pour stocker s'il est actif ou non. Lorsque tu tires, tu l'actives et du mets ses variables de vitess vx et vy de sorte à ce qu'il parte dans la bonne direction. Dès qu'il sort de l'écran ou qu'il touche un obstacle, tu le désactives.
C'est beaucoup plus simple si tu choisis de n'en n'avoir qu'un à la fois. Dans un second temps, Si tu veux pouvoir en avoir plusieurs qui existent en même temps, tu peux continuer les tutos de l'académie jusqu'à 202 attrap'oeuf pour voir comment utiliser les tableaux :)