gpt4 book ai didi

python - 在 python 和 tkinter 中检测碰撞

转载 作者:行者123 更新时间:2023-11-30 23:24:36 25 4
gpt4 key购买 nike

我有以下设置:我有一个可以射箭的弓箭手,它始终是 arrow 类的新实例,并且我有一个 blackMonster 类的实例。我的问题是是否有可能检测到我的一个箭头实例是否与这个黑色怪物实例发生了碰撞?当可能时,它是如何制作的?我曾经经常思考这个问题,但我还找不到解决方案,这真的很令人沮丧。这是我的代码...请不要过分评判它,我即将对其进行处理。

from Tkinter import *
from PIL import ImageTk, Image

class App(Frame):
def __init__(self, master=None):
Frame.__init__(self, master, height=400, width=400)
self.master = master
self.master.bind('<Shift_L>', self.createArrow)
self.charImg = ImageTk.PhotoImage(Image.open("./Archer.gif"))
self.charLabel = Label(self, image = self.charImg)
self.charLabel.pack()
self.down = False
self.right = False
self.left = False
self.up = False
self.x_coord = 200
self.y_coord = 200
self.pack_propagate(0)
self.pack()
self.monster = blackMonster(self)
self.monster.createMonster(self.monster, 300, 300)
def createArrow(self, event):
self.arrow = Arrow(self)
self.arrow.moveArrow(self.arrow, self.x_coord, self.y_coord + 15)
def moveableImage(self):
self.charLabel.place(y=self.y_coord, x=self.x_coord)
def keyPressed(self, event):
if event.keysym == 'Down':
self.down = True
elif event.keysym == 'Right':
self.right = True
elif event.keysym == 'Left':
self.left = True
elif event.keysym == 'Up':
self.up = True
def keyReleased(self, event):
if event.keysym == 'Down':
self.down = False
elif event.keysym == 'Right':
self.right = False
elif event.keysym == 'Left':
self.left = False
elif event.keysym == 'Up':
self.up = False
def task(self):
if self.down and self.y_coord < 360:
self.y_coord += 10
elif self.right and self.x_coord < 370:
self.x_coord += 10
elif self.left and self.x_coord > 10:
self.x_coord -= 10
elif self.up and self.y_coord > 10:
self.y_coord -= 10
root.after(20,self.task)
self.moveableImage()

class Arrow(Frame):
def __init__(self, master):
Frame.__init__(self, master)
self.arrowImage = ImageTk.PhotoImage(Image.open("./arrow.gif"))
Label(self, image=self.arrowImage).pack()
self.damage = 20
def moveArrow(self, arrow, xCoord, yCoord):
arrow.place_forget()
arrow.place(x = xCoord, y = yCoord)
self.after(10, self.moveArrow, arrow, xCoord+5, yCoord)


class blackMonster(Frame):
def __init__(self, master):
Frame.__init__(self, master)
self.monsterImage = ImageTk.PhotoImage(Image.open("./monster.gif"))
Label(self, image=self.monsterImage).pack()
self.health = 100
def createMonster(self, monster, x_Coord, y_Coord):
monster.place(x = x_Coord, y = y_Coord)

root = Tk()
root.title("Frametitel")
app = App(master=root)
root.bind_all('<Key>', app.keyPressed)
root.bind_all('<KeyRelease>', app.keyReleased)
root.after(20, app.task)

app.mainloop()

最佳答案

你使用标签和地点来代表怪物和箭头?如果您使用 Canvas 而不是标签,编码会容易得多。 Canvas 有方法可以轻松获取已绘制对象的坐标。那么这只不过是一点数学而已。你得到了箭头的当前坐标,你得到了怪物的坐标,然后检查箭头尖端的坐标是否在怪物占据的空间内。您可以使用 bbox 获取对象的坐标方法。

关于python - 在 python 和 tkinter 中检测碰撞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23329280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com