Mouvements d'un personnage.

Bonjour! J’ai un problĂšme assez bĂȘte

Je suis entrain d’apprendre à programmer en python avec ma gamebuino.
Pour mon premier programme, j’ai fait un cube qui peut se dĂ©placer de droite Ă  gauche. Petit problĂšme, je n’arrive pas Ă  le faire sauter

Est-ce que quelqu’un pourrait m’aider.
Merci :blush:

1 Like

deux possibilités, soit tu implémentes un mini moteur physique, le perso à une vitesse et une accélération, tu met à jour celle ci avec la gravité en fonction du temps

ou tu fake la chose en ajoutant à ton programme une table des valeurs de sinus, que tu utilisera pour calculer le déplacement effectif du perso suivant le temps

une vidéo simple sur la premiÚre méthode :

(il existe 40 milliards de tuto sur le net pour implémenter cette fonctionnalité)

Bien sĂ»r, d’ailleurs cette problĂ©matique revient rĂ©guliĂšrement.
Pas en Python mais le principe reste le mĂȘme.
Pour que l’on t’aide efficacement, je t’invite à regarder ces liens:



Si tu n’y arrives pas, partage ton code pour que l’on puisse directement t’indiquer plus d’élĂ©ments.
(Il y a d’autres exemples de rĂ©ponses sur le forum mais je pense que celles ci devraient te suffire, tu n’as plus qu’à les transposer en Python, ce qui est assez simple, je pense mais demande si ce n’est pas le cas)

1 Like

DesolĂ© je suis dĂ©butant en programmation et je me perds rapidement dans d’autres langages.
Voici mon code:

from gamebuino_meta import begin, waitForUpdate, display, color, buttons, collide
import time

SCREEN_WIDTH  = 80
SCREEN_HEIGHT = 64

player_x_speed = 1
player_y_speed = 1
player_height = 3
player_width = 3

player_x_position = 40
player_y_position = 58


while True:
    waitForUpdate()
    display.clear()

    display.print("x:")

    display.print(player_x_position)

    display.print("\n")

    display.print("y:")

    display.print(player_y_position)



    if buttons.repeat(buttons.LEFT, 0):
        player_x_position = player_x_position - player_x_speed

    if buttons.repeat(buttons.RIGHT, 0):
        player_x_position = player_x_position + player_x_speed

    



    if player_x_position <= 0:
        player_x_position = 0

    if player_x_position >= 80 - player_height:
        player_x_position = 80 - player_height

    if player_y_position <= 0:
        player_y_position = 0

    if player_y_position >= 64 - player_height:
        player_y_position = 64 - player_height



    display.setColor(color.RED)
    display.fillRect(player_x_position, player_y_position, player_width, player_height)

J’ai fait des recherches et les seul tuto sont sur pygame.
Sur pygame , il y a une vĂ©locité  Mais le problĂšme c’est que je ne sais pas comment le faire sur gamebuino.

@r043v Dans votre vidĂ©o il y a Ă©galement la vĂ©locitĂ©. Comment la vĂ©locitĂ© s’écrit t’elle sur python?

je n’ai jamais fais de python, mais ici on parle d’algo et de math, l’implĂ©mentation importe peu

la vidéo utilise des vecteurs, donc de simple tableaux, et va travailler à la fois sur x et y

Ă  toi de trouver une lib python implĂ©mentant des vecteurs et les opĂ©rations dessus, ou plus simplement le faire Ă  la main, ou utiliser deux variables et le faire toi mĂȘme

sinon, plus simplement et tout aussi efficace tu peux travailler seulement sur l’axe y pour gĂ©rer la gravitĂ© et laisser x gĂ©rĂ© par les touches comme actuellement, ton accĂ©lĂ©ration et ta vitesse deviendrons alors de simple variables ce qui simplifiera tout le code

lib c’est library?

Salut,

J’ai Ă©cris un workshop pour faire les bases d’un jeu de plateformes pour la Gamebuino META, c’est en C++ mais facilement transposable en Python, et donc j’ai Ă©cris une Ă©tape sur les dĂ©placements et en particulier sur le saut.

Plus d’infos sur le workshop ici, rends toi Ă  l’étape 2 : “Gestion des dĂ©placements” (pour tout ce qui concerne le saut).

Je te fais un portage du saut (en Python) dans la soirée :slight_smile:

Bon apprentissage :wink:
chris-scientist

3 Likes

Me revoilĂ ,

Comme je te l’ai dis @JuMpeR6790 tu trouvera un exemple d’implĂ©mentation du saut en Python en suivant ce lien : https://gist.github.com/chris-scientist/6e202147bebd482a2ad84fe6a21171c8.

J’ai crĂ©Ă© un dĂ©pĂŽt Gist pour y hĂ©berger mon exemple. Il s’agit d’un carrĂ© 2x2 pixels qui peut aller de gauche Ă  droite, mais Ă©galement sauter. Il y a peu de commentaires, mais le code est trĂšs dĂ©coupĂ©. Prends le temps de comprendre chacune des fonctions. Modifie les paramĂštres GRAVITY, HORIZONTAL_VELOCITY et INIT_VERTICAL_VELOCITY, tu verra que les deux derniers paramĂštres jouent beaucoup sur la trajectoire du carrĂ© (lors du saut). De plus, pour t’aider dans ta comprĂ©hension tu peux faire le lien avec le workshop sur les jeux de plateformes, dont je parlais dans mon prĂ©cĂ©dent message, bien qu’écrit en C++, la logique est la mĂȘme.

Je ne peux pas faire plus ce soir
 je travaille demain !

Mais si tu as des questions n’hĂ©site pas :wink:
chris-scientist

3 Likes

@chris-scientist

NO_ID                   = 0
ID_GROUND               = 1

A quoi servent ces deux variables dans le programme?

Salut @JuMpeR6790 ,

NO_ID indique que l’on est sur aucune plateforme. Et ID_GROUND sert à indiquer qu’on est sur le sol.

Sinon dans le programme Python que je t’ai donnĂ© il y a une fonctionnalitĂ© non voulu. Normalement les flĂšches pour aller Ă  gauche ou Ă  droite doivent ĂȘtre utilisable en dehors du saut. Or si tu fais attention tu peux jouer avec la direction du carrĂ© pendant le saut.

chris-scientist

1 Like

@chris-scientist Desolé encore de te déranger.

ON_THE_PLATFORM_STATE   = 0
FREE_FALL_STATE         = 1
PUSH_FOR_JUMP_STATE     = 2
JUMP_STATE              = 3

et ces variables

Ce ne sont pas des variables mais des constantes utilisées pour rendre les programmes plus lisibles.
Si tu mets Etat = 0, quand tu lis le code, ce n’est pas trĂšs parlant alors que si tu lit Etat = ON_THE_PLATFORM_STATE, tu sais que tu mets dans Ă©tat la valeur correspondant Ă  celle que doit avoir le personnage (par exemple) lorsqu’il est sur la plateforme (il est arrivĂ© et peut alors marcher Ă  droite ou Ă  gauche ou sauter).
Les autres Ă©tats servent Ă  gĂ©rer le saut FREE_FALL_STATE => le personnage retombe, dans cet Ă©tat du peut gĂ©rer ce qu’il a le droit de faire (autorise tu ou non le contrĂŽle du saut en appuyant sur les flĂšches directionnelles ?), PUSH_FOR_JUMP_STATE: l’utilisateur Ă  appuyer pour sauter, JUMP_STATE: le saut est en cours

Tu vois, je dis ça sans mĂȘme avoir Ă©tait voir le programme (comme je bosse, je n’ai pas le temps de vĂ©rifier) mais ça montre bien que ça augmente la lisibilitĂ© puisque rien qu’avec ces noms clairs pour les Ă©tats du saut, je peux expliquer Ă  quoi ils servent sans voir le code 
 :wink:

4 Likes

Merci @jicehel et c’est bien ça !

@JuMpeR6790 regarde le workshop que je t’ai indiquer c’est du C++ mais les noms des variables, constantes, fonctions, etc sont identiques. Et j’y explique tout :wink:

1 Like

@JuMpeR6790 t’as Ă©tudiĂ© le programme que je t’ai donnĂ© ainsi que le workshop ?

1 Like

@chris-scientist Oui dĂ©solĂ© de te rĂ©pondre si tard. J’ai Ă©tĂ© occupĂ© ces derniers temps et je suis au moment oĂč j’écris ce message entrain de regarder la partie de ton workshop pour faire sauter :slight_smile:

1 Like

Parfait, si aprĂšs la lecture tu as des questions n’hĂ©site surtout pas :wink: