J'ai fait quelques petits jeux avec le module pygame et ça a été amusant. Cependant, maintenant j'essaie de déplacer le personnage avec un piano via midi en utilisant pygame.midi. il y a le problème. Je l'ai fait mais pas de la façon dont je le voulais parce que le personnage bouge parfois et l'autre ne le fait pas. Je pense que je sais où est le problème: Si je comprends bien, la fonction pygame.event.get() "attraper" les événements toujours, peu importe quand (à l'intérieur de la boucle principale du jeu), donc je pense que mon code ne se passe pas, je veux dire, je crois que le joueur ne fait pas toujours ce qu'il est censé faire parce que l'entrée midi doit être dans un "temps" spécifique pas comme pygame.event.get(). J'ai regardé dans la documentation de pygame et il semble y avoir une fonction qui fait l'affaire: pygame.midi.midis2events(), mais je ne sais pas comment l'utiliser. La question est juste: Comment puis-je déplacer le personnage à travers le piano via midi avec pygame pour que le personnage bouge à chaque fois?façons d'utiliser les événements midi pour faire bouger un joueur en pygame
import pygame as pg, pygame.midi
WIDTH = 800
HEIGHT = 600
FPS = 60
BLACK = (0,0,0)
BLUE = (0,0,255)
pg.init()
pg.midi.init()
screen = pg.display.set_mode((WIDTH,HEIGHT))
pg.display.set_caption('STACKOVERFLOW_EXAMPLE_MIDI')
clock = pg.time.Clock()
running = True
inp = pg.midi.Input(1)
x = WIDTH//2
y = HEIGHT//2
speedx = 0
midi_list = []
while running:
clock.tick(FPS)
if inp.poll():
midi_value = inp.read(1000)[0][0][1]
if midi_value==57:
midi_list.append(midi_value)
if len(midi_list)==1:
speedx = -1
else:
speedx = 0
midi_list = []
if midi_value == 63:
running = False
x = x+speedx
screen.fill(BLUE)
pg.draw.rect(screen,BLACK,[x,y,50,60])
pg.display.update()
pg.display.flip()
pg.quit()
J'ai besoin que le joueur se déplace vers la gauche (ou à droite) lorsque la clé piano's A3 (une note spécifique) est pressé et que le joueur cesse de se déplacer lorsque la clé a été libéré . Dans ce fragment particulier du code, mais aussi pour faire des choses comme appuyer sur la touche d'un piano et tirer une balle indépendamment du fait d'être pressé ou non, en bref, faire les mêmes choses que je peux faire avec les événements du clavier.
Veuillez fournir un [mcve] du problème. –
se référer à: https://github.com/xamox/pygame/blob/master/examples/midi.py –
ok, je pense que j'ai un exemple minimal, complet et vérifiable! –