我最近开始使用python查看tkinter,并开始制作一个马里奥风格的游戏,包括一个玩家(矩形)四处移动,与平台碰撞等等并收集硬币。
我对球员击球的检测系统涉及球员坐标的* .find_overlapping方法,如果它们与地面重叠,或者说是另一个平台,那么它将球员的坐标设置为在所述对象之上。
def collide():
playerBox = screen.find_overlapping(screen.coords(player)[0], screen.coords(player)[1]
, screen.coords(player)[2], screen.coords(player)[3])
if playerBox in [(1, 3)]:
screen.coords(player, screen.coords(player)[0], screen.coords(root.floor)[1] - defaultHeight
, screen.coords(player)[2], screen.coords(root.floor)[1])
(这是(1,3)返回重叠表示玩家与地面(地板)重叠的地方,如果你想知道,则默认高度为56,这样玩家身高保持不变。)
但是,如果玩家与硬币接触,则它们会从地面掉落,并保持在地面以下。为了解决这个问题,我有一个对象启动列表(由与实际硬币创建一起创建的字典)制作的硬币,如下所示:
coinList = [4, 5, 6...] #For however many coins are made (As the first coin is the fourth object on screen, this may change though)
我希望能够将这个coinList包含在上面显示的if语句中,例如:
if playerBox in [(1, 3), (1, 3, coinList)]:
但这不起作用,我无法理解为什么或如何起作用。
我愿意接受您解决此问题的任何其他建议!
提前致谢。
PS:很抱歉,如果我的帖子格式错误或信息不足,请随时根据需要提供更多信息。
答案 0 :(得分:0)
find_overlapping
返回与玩家矩形重叠的对象元组。你必须逐个比较每个元素
playerBox = screen.find_overlapping(*screen.coords(player))
all_elements = [1, 3] + coinList
found = False
for x in playerBox:
if x in all_elements:
found = True
break
if found:
screen.coords(player, ...)
或者您可以使用set()
playerBox = screen.find_overlapping(*screen.coords(player))
all_elements = [1, 3] + coinList
if set(playerBox) & set(all_elements):
screen.coords(player, ...)