[Tkinter] Collision barre/balle

Messages postés
1
Date d'inscription
samedi 18 avril 2015
Statut
Membre
Dernière intervention
18 avril 2015
-
Bonjour, actuellement sur un projet de pong, je me heurte au problème de collision entre ma balle et ma barre, je sais de quelle manière faire rebondir ma balle puisque que je l'ai déjà fait avec les murs de ma zone de jeu mais je ne connais pas de commande me permettant de traduire la phrase : "Si la boule entre en collision avec les coordonnées de la barre (la commande que je cherche), alors faire rebondir la boule (là je sais comment faire)"
Je précise que la barre en question est mobile, et c'est la tout le problème puisque ses coordonnées ne sont pas fixes sur l'axe Y :(

La phrase "Si la boule entre en collision avec l'objet barre (la commande que je cherche), alors faire rebondir la boule (là je sais comment faire)" est d'ailleurs équivalentes si ça peut vous guider sur ce que je cherche.

Merci d'avance pour l'aide apportée :)
Afficher la suite 

2 réponses

Messages postés
70
Date d'inscription
mercredi 1 novembre 2000
Statut
Membre
Dernière intervention
1 juin 2018
9
0
Merci
Salut, tu mets le pied dans la gestion de collisions entre objets dans un jeu. Ton cas correspond à la base de l'apprentissage et s'appelle la collision AABB(Axis Aligned Bounding Box) tu trouvera ton bonheur ici :
http://jeux.developpez.com/tutoriels/theorie-des-collisions/collisions-specifiques-jeux/

--
Commenter la réponse de Mints
Messages postés
97
Date d'inscription
lundi 9 octobre 2006
Statut
Membre
Dernière intervention
7 décembre 2018
41
0
Merci
Bonjour,

Voici comment je comprends votre question:
- En utilisant Tkinter, quelle commande me permet de détecter une collision entre 2 objets sur un canvas?

Pour Tkinter collision = recouvrement(overlapping)

Voici une proposition de code qui vous aidera peut-être:

# -*- coding: ISO-8859-15 -*-
from tkinter import *
from time import sleep

Ecran = Tk()
Grille = Canvas(Ecran, width = 400, height = 400)
Grille.pack()

barre = Grille.create_rectangle(10, 0, 20, 100, fill = "blue")
balle = Grille.create_oval(100, 100, 120, 120, fill = "red")
print ("ID barre =", barre, "Id balle =", balle)

print ("coordonnées barre", Grille.coords(barre))
print ("coordonnées balle", Grille.coords(balle))
Ecran.update()
sleep(1)

#Déplacement de la barre
Grille.move(barre, 0,50)

#Déplacement de la balle
Grille.move(balle, -70,0)
Ecran.update()
sleep(1)

print(Grille.find_overlapping(*Grille.coords(barre)))
print("ObectID 1 n'a aucun recouvrement")
Ecran.update()
sleep(1)

#Déplacement de la balle
Grille.move(balle, -10,0)
print(Grille.find_overlapping(*Grille.coords(barre)))
print("ObectID 2 est en recouvrement avec ObjectID 1")


Ecran.mainloop()



dans la commande Grille.find_overlapping(*Grille.coords(barre)) l'astérisque indique que les 4 paramètres de coordonnées sont contenus dans une liste
--
Commenter la réponse de lespinx