Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
游戏Python中的碰撞问题_Python_Pygame_Collision - Fatal编程技术网

游戏Python中的碰撞问题

游戏Python中的碰撞问题,python,pygame,collision,Python,Pygame,Collision,我目前正在使用Python3.2.3和pygame创建一个游戏。我正在创建一个非常类似于马里奥(一个侧滚器)的游戏;我的游戏包括一系列的“砖块”,角色需要跳上去并能够与之碰撞。我已经在photoshop和mask中创建了一个色码级别,这样红色是角色将死亡的区域,绿色是砖块的颜色,蓝色是地面的颜色。以下是我遇到问题的代码: guy[y]+=guy[vy] # add current speed to Y col = mask.get_at((int(guy[x]+662), in

我目前正在使用Python3.2.3和pygame创建一个游戏。我正在创建一个非常类似于马里奥(一个侧滚器)的游戏;我的游戏包括一系列的“砖块”,角色需要跳上去并能够与之碰撞。我已经在photoshop和mask中创建了一个色码级别,这样红色是角色将死亡的区域,绿色是砖块的颜色,蓝色是地面的颜色。以下是我遇到问题的代码:

    guy[y]+=guy[vy]     # add current speed to Y

col = mask.get_at((int(guy[x]+662), int(guy[y]+59)))
if col == (0,0,255,255):
    guy[y] = 537
    guy[vy] = 0
    guy[onground] = True
if col == (0,255,0,255):
    guy[vy] = 0
    guy[onground]=True
elif col == (255,0,0,255):
    guy[vy] = 5
    guy[onground] = False
if guy[y]+59 >= 720:
    lives -= 1
    screen.blit(guyPic,(640,guy[y]))
guy[vy]+=.75

当我试图让角色降落在砖块上(或果岭上)时,他降落了,但他开始下沉。他还可以直接穿过砖块。我希望角色能够与砖块碰撞,这样他就不能直接穿过砖块,但他能够跳跃并降落在砖块上而不会下沉。我确实知道另一种可能的方法,即在每个砖的坐标处绘制矩形,但这种方法效率很低,因为代码太多。我非常感谢您对这个错误的帮助,因为我在过去的两周里一直在尝试修复它。感谢您的帮助

绘制矩形更好。而且逻辑上更简单。您可以检测两个矩形是否发生碰撞,因为pygame已经支持碰撞检测。您可以看到:

确保将“guy[vy]+=.75”放在代码的开头。在这之前,不管碰撞如何设置y速度,它总是在代码末尾被设置回.75。因此,当你触地时,你仍然会以.75 y的速度通过它。还可以尝试通过为“guy[vy]+=.75”添加一个条件语句来限制最大下降速度,这样它只会在“guy[y]时”运行
    guy[y]+=guy[vy]     # add current speed to Y
guy[vy]+=.75
col = mask.get_at((int(guy[x]+662), int(guy[y]+59)))
if col == (0,0,255,255):
    guy[y] = 537
    guy[vy] = 0
    guy[onground] = True
if col == (0,255,0,255):
    guy[vy] = 0
    guy[onground]=True
elif col == (255,0,0,255):
    guy[vy] = 5
    guy[onground] = False
if guy[y]+59 >= 720:
    lives -= 1
    screen.blit(guyPic,(640,guy[y]))