ce que je veux dire c'est que j'ai bien placé les coordonées du mur mais que je ne peux pas bouger de mon point d'origine et que ça affiche "collisions" sur l'invite de commande
Tu dois essayer de chercher tout seul. Je ne vais pas te faire ton programme, je pense t'avoir donné assez de piste pour que tu puisses t'en sortir tout seul non ? =)
Je suis un peu bloqué, car le problème c'est que pygame voit les choses d'une mauvaise manière et pense que je suis constamment en collision, donc il exécute uniquement la ligne de code if hero.position.collidelist(mescollisions): et à cause de ça je ne peux pas déplacer mon hero sur la surface de l'écran
mon erreur doit te paraître bête mais j'ai exploré plusieurs possibilités sans succès.
il faut que tu sache aussi que je n'est pas 21 ans comme toi^^, j'en ai que 13 --' et que donc il y a des choses que je suis susceptibles de comprendre moins rapidement qu'une personne plus âgée que moi.
sache aussi que tout ce que tu ma montré sur ce forum, je l'ai compris et que je pourrais le réattribuer sur d'autres programmes.
pourrais-tu s'il te plait me dire pourquoi pygame pense que je suis constamment en collision ?
voici mon code :
from pygame.locals import *
from tkinter import *
from constantes import *
pygame.init()
#Ouverture de la fenêtre Pygame
fenetre = pygame.display.set_mode((545, 416))
#Personnalisation du jeu
icone = pygame.image.load(image_icone)
pygame.display.set_icon(icone)
pygame.display.set_caption(titre_fenetre)
#Chargement et collage du fond
fond = pygame.image.load(image_accueil).convert()
fenetre.blit(fond, (0,0))
pygame.display.flip()
mur1 = pygame.Rect(1, 1, 1, 1)
mescollisions = [mur1]
#son
son = pygame.mixer.Sound(SAN_1)
son.play()
resterac = True
class hero(pygame.sprite.Sprite):
def __init__(self):
self.image_face = pygame.image.load("images/perso_face.png").convert_alpha()
self.image_left = pygame.image.load("images/perso_left.png").convert_alpha()
self.image_right = pygame.image.load("images/perso_right.png").convert_alpha()
self.image_back = pygame.image.load("images/perso_back.png").convert_alpha
self.image = self.image_right
self.position = pygame.Rect(85, 168, 27, 32,)
hero = hero()
while resterac:
for event in pygame.event.get():
if event.type == QUIT:
resterac = False
if event.type == KEYDOWN:
if event.key == K_SPACE:
fond = pygame.image.load(T_a).convert()
fenetre.blit(fond, (0,0))
jeu = True
fenetre.blit(hero.image, hero.position)
pygame.key.set_repeat(1, 35)
pygame.display.flip()
#Boucle jeu
while jeu:
for event in pygame.event.get():
if event.type == QUIT:
jeu = False
if event.type == KEYDOWN:
if hero.position.collidelist(mescollisions) == -1:
hero.position.x -= 1 #Il ne s'arrête pas mais recule d'un pixel
else:
if event.key == K_w:
hero.position.y += 10
hero.image = hero.image_back
elif event.key == K_s:
hero.position.y -= 10
hero.image = hero.image_face
elif event.key == K_a:
hero.position.x -= 10
hero.image = hero.image_left
elif event.key == K_d:
hero.position.x += 10
hero = hero.image_right
fenetre.blit(fond, (0,0))
fenetre.blit(hero.image, hero.position)
pygame.display.flip()
Tu pourrai placer des prints pour débuguer. Par exemple pour savoir si pygame considère que tu es en collision :
if hero.position.collidelist(mescollisions) == -1:
hero.position.x -= 1 #Il ne s'arrête pas mais recule d'un pixel
print("Position Hero : %i x %i" % (hero.position.y, hero.position.x)
for collision in mescollisions:
print("Position Colision : %i:%i" % (collision.x, collision.y)
Si tu regardes mon programme il existe un truc plus propre pour gérer les collisions. Par exemple si ton héro va en bas (donc qu'une touche est pressée), tu prends la position de ton héro actuelle et tu lui ajoutes 1 en y (par exemple) et tu regardes si cette nouvelle position est collisionnante. Si elle est collisionnante alors tu retires 1 à y.
Voilà comment j'ai fait :
if (event.key == K_LEFT):
# Ici je créé un faux rectangle qui indique la position de mon héro APRÈS avoir bougé
testrect = pygame.Rect(angus.collision.x-2, angus.collision.y, 26, 16 )
# Si ce rectangle entre en collision alors ce n'est pas la peine de bouger car mon héro sera en collision !
# Par contre si ce rectangle n'entre pas en collision alors tout va bien, on peut déplacer le héro.
if testrect.collidelist(formosa.boxcollider) == -1:
angus.position.x -= 2
angus.collision.x -= 2
j'ai un petit soucis je n'arrive pas à faire afficher 2 personnages en meme temps sur mon code je suis un petit bambis aidez moi sinon je vais avoir une mauvaise apreciation
CORDIALEMENT
UN PROF D ICN ( DEBUTANT )
repondez avant le 12 / 02 / 2019 svp
- Edité par EofjkfJfdjffj 5 février 2019 à 14:25:39
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.