Python - Detectar colisión de imagenes en python tkinter?

 
Vista:
sin imagen de perfil
Val: 2
Ha aumentado su posición en 957 puestos en Python (en relación al último mes)
Gráfica de Python

Detectar colisión de imagenes en python tkinter?

Publicado por Aesio (1 intervención) el 12/06/2021 06:58:07
Sé que para éstas cosas es mejor pygame, pero quiero probar en tkinter solo para ver.

la cosa es que quiero mover una esfera y que atraviese un laberinto, algo simple, pero quiero ver que cuando llegue a los muros no las pase Hice unos botoncitos para que la imagen se mueva a medida que vaya apretando, y luego iré agregando más cosas, sólo quería saber si sigo con esto o mejor me paso a pygame o turtle o como se llamen las demás librerías.

Por ahora he puesto que los muros aparezcan encima de la bola, pero no sé como hacer para que no se toquen.

Hasta los puse en diferentes labeles para que sea más fácil.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
import tkinter as tk
 
def arriba():
    global posx    #variables de alcance para todo el script no solo la función
    global posy
    global ima
 
    posx = posx
    posy -= 4
    canvas.delete(ima)
    ima = canvas.create_image(posx,posy, image=myimg)
    canvas.delete(image2)
    canvas.create_image(450,400,image=image2)
 
def abajo():
    global posx    #variables de alcance para todo el script no solo la función
    global posy
    global ima
 
    posx = posx
    posy += 4
    canvas.delete(ima)
    ima = canvas.create_image(posx,posy, image=myimg)
    canvas.delete(image2)
    canvas.create_image(450,400,image=image2)
 
def derecha():
    global posx    #variables de alcance para todo el script no solo la función
    global posy
    global ima
 
    posx -= 4
    posy = posy
    canvas.delete(ima)
    ima = canvas.create_image(posx,posy, image=myimg)
    canvas.delete(image2)
    canvas.create_image(450,400,image=image2)
 
def izquierda():
    global posx    #variables de alcance para todo el script no solo la función
    global posy
    global ima
 
    posx += 4
    posy = posy
    canvas.delete(ima)
    ima = canvas.create_image(posx,posy, image=myimg)
    canvas.delete(image2)
    canvas.create_image(450,400,image=image2)
 
 
ventana=tk.Tk()
ventana.title("Bosque")
ventana.geometry('900x800')
ventana.resizable(0,0)
 
 
frame = tk.Frame(ventana)
frame.pack()
 
canvas = tk.Canvas(frame, width=900, height=800)
canvas.pack()
 
image=tk.PhotoImage(file="labetinto.gif")
canvas.create_image(450,400,image=image)
 
 
myimg = tk.PhotoImage(file='circlo.png')
posx=70
posy=235
ima = canvas.create_image(70,235,image=myimg)
 
frame2 = tk.Frame(ventana)
frame.pack()
canvas2 = tk.Canvas(frame2, width=900, height=800)
canvas.pack()
 
image2=tk.PhotoImage(file="muros.png")
canvas.create_image(450,400,image=image2)
 
 
boton = tk.Button(text="  ↑  ",font=("Verdana",17),command=arriba)
boton.config(bg="#135C3F", fg="#D7D731")
boton.place(x=750,y=330)
 
boton1 = tk.Button(text="  ↓  ",font=("Verdana",17),command=abajo)
boton1.config(bg="#135C3F", fg="#D7D731")
boton1.place(x=750,y=423)
 
boton2 = tk.Button(text="  Ir  ",font=("Verdana",16))
boton2.config(bg="#135C3F", fg="#D7D731")
boton2.place(x=751,y=379)
 
boton3 = tk.Button(text=" → " ,font=("Verdana",17),command=izquierda)
boton3.config(bg="#135C3F", fg="#D7D731")
boton3.place(x=817,y=376)
 
boton4 = tk.Button(text=" ← ",font=("Verdana",17),command=derecha)
boton4.config(bg="#135C3F", fg="#D7D731")
boton4.place(x=690,y=376)
 
ventana.mainloop()
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Detectar colisión de imagenes en python tkinter?

Publicado por rolando jose Torres Sánchez (43 intervenciones) el 28/06/2021 04:09:31
Yo creo que el problema se solucion fcil gracias al onceptomismo del Juego, pues si tuvieras las paredes del laberinto en una matriz, te seria mucho mas facil mover la bola por esa matriz y saber en que momento la bola o el radio tocan las paredes del laberinto "corredor".

El problema es como escanear el laberinto y vectorizarlo, y gracias a que tkinter esta basado en TCL y que python comparte esta libreria con TCL creo que tengo la ssolucion.

en TCL photo maneja las imagenes de color real como las pngs, por lo que la forma para rastrear los pixeles de una imagen se puede hacer si se le pide get a la imagen en los puntos x,y y retuena tres valores correspondientes a RGB con valores del 0 al 255.

Si rastreas toda la imagen del labrinto y hay una diferencia en el color netre los muros y el piso fondo del laberinto, podras rastrear los muros y saber en que pixel hay muro y en cual hay corredor, de esa forma puedes o dibujar el laberinto como poligono o bien poner el laberinto en un matriz e para cada apaso de ls bola clcular si con un radio R la bola toca alguno de los muros o no.


la documnetcion e canvas eta en ests pagina.

https://www.tcl-lang.org/man/tcl/TkCmd/canvas.htm
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar