游戏Python中的碰撞问题

时间:2014-05-21 00:45:54

标签: python pygame collision

我目前正在使用python 3.2.3和pygame创建游戏。我正在创建一个与Mario(侧卷轴)非常相似的游戏;我的游戏涉及到一系列的砖块'该角色需要跳跃并能够与之碰撞。我已经在photoshop和面具中创建了一个颜色编码的级别,以便红色是角色将死亡的区域,绿色是砖块的颜色,蓝色是地面的颜色。以下是我遇到问题的代码:

    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

当我试图让角色落在砖块上(或在绿色上)时,他降落,但他开始下沉。他也可以穿过砖块。我希望这个角色能够与砖块发生碰撞,这样他就无法穿过它们,但是他能够在不沉没的情况下跳跃并着陆。我知道另一种可能的方法是在每块砖的坐标处绘制rects但是这种方法效率非常低,因为代码太多了。我非常感谢这个错误的一些帮助,因为我在过去两周试图修复它。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

绘图更好。而且它在逻辑上更容易。您可以检测两个rects是否发生碰撞,因为pygame已经支持碰撞检测。你可以看到:pygame.Rect.colliderect

答案 1 :(得分:0)

确保你把'guy [vy] + =。75'放在代码的开头。尽管碰撞设置了y速度,但在代码结束时总是被设置回0.75。因此,当你击中地面时,你仍然会以0.75 y的速度穿过它。还可以尝试通过为'guy [vy] + =。75'添加一个条件语句来限制最大下降速度,这样它只能运行'如果guy [y]< = 10:' 祝你好运:)。

=COUNTIF(INDEX($I$54:$V$62,,ROWS($54:54)),"Yes")