[Tkinter] Collision barre/balle

LockStratos Messages postés 1 Date d'inscription samedi 18 avril 2015 Statut Membre Dernière intervention 18 avril 2015 - Modifié par LockStratos le 18/04/2015 à 18:51
lespinx Messages postés 106 Date d'inscription lundi 9 octobre 2006 Statut Membre Dernière intervention 23 novembre 2022 - 21 avril 2015 à 11:11
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 :)

2 réponses

Mints Messages postés 69 Date d'inscription mercredi 1 novembre 2000 Statut Membre Dernière intervention 1 juin 2018 7
19 avril 2015 à 11:05
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/

--
0
lespinx Messages postés 106 Date d'inscription lundi 9 octobre 2006 Statut Membre Dernière intervention 23 novembre 2022 77
21 avril 2015 à 11:11
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
--
0
Rejoignez-nous