2014-05-21 126 views
0

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

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 

当我试图使在砖上(或绿色),他的土地的性质土地,但他开始下沉。他也可以通过砖块走路。我希望角色能够与砖块发生碰撞,这样他就不会从砖块中穿过,但是他能够在不下沉的情况下跳跃并着陆。我知道另一种可能的方法,就是在每个砖的坐标处绘制矩形,但是这种方法效率很低,因为它会代码太多。我非常感谢这个错误的一些帮助,因为我试图在过去两周内解决它。任何帮助表示赞赏。

回答

1

绘图反应比较好。这在逻辑上更容易。您可以检测两个矩阵是否碰撞,因为pygame已经支持碰撞检测。你可以看到:pygame.Rect.colliderect

0

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

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]))