我已经开始用python最近研究tkinter,并开始制作一个马里奥式的游戏,涉及一个玩家(矩形)移动,碰撞平台等,并收集硬币。我的玩家击中地面的检测系统涉及玩家坐标的* .find_overlapping方法,如果他们重叠地面或者说每个人说另一个平台,那么它将玩家的坐标设置为在所述对象的顶部。我如何将一个列表中的值作为if语句的范围包含在另一个列表中?
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)返回重叠代表与地面(楼面玩家重叠),以及defaultHeight是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:很抱歉,如果我的文章格式不正确或者信息不够,请随时索取更多信息。
你能给什么'playerBox'将是一个例子(A值进行比较?一个包含值列表?一个包含元组的列表?)以及你在''in ...'子句中看起来像什么(比如说,'[(1,3),(1,3,4,5,6)]' )?我不太清楚你真正想要得到什么结果,说实话:) – Deneb
如果你使用Python 3.x,那么你所要做的就是写'if playerBox in [(1,3),(1 ,3,* coinList)]:'* star将把列表取消到元组中。 (如果这是你想要的) – Nf4r