在过去的几天里,我一直在对这个主题进行广泛的研究,但我似乎无法为我的确切问题找到答案。
所以,我有一个简单的游戏设置,我的玩家在 0, 0,宽度为 10x10
player= pygame.Rect(0, 0, 10, 10)
除此之外,玩家的速度为 x: 0, y: 10,这将使他跌倒(y 为正,因为屏幕的原点在左上角。)
我在 0、100 处有一个图块,如图所示:
dirt= pygame.Rect(0, 100, 10, 10)
所以,我该如何处理碰撞,我已经知道我可以用 Rect.colliderect(Rect) 来检测它。
我尝试了几种方法,但遇到了一些问题:
当玩家击中某物时,我无法将玩家的速度降至 0,然后将他向后移动,直到他刚刚接触到物体,因为这仍然会导致行走问题,当他行走时,我在 x 上应用 +10 速度,但不幸的是,游戏仍在处理他正在坠落、碰撞和侧向移动,所以它只是将他移回他开始的地方。
我是一个初学者,所以一个简单的答案将不胜感激,如果我不需要,我希望不必使用pygame 以外的任何第三方模块。
更新:
这是我尝试过的一些粗略测试代码:
def sim(obj, time, world):
time= time / 1000
obj.physProp['vel']= (obj.physProp['vel'][0] + (accel[0] * time), obj.physProp['vel'][1] + (accel[1] * time))
if obj.physProp['vel'][1] > terminalY:
obj.physProp['vel']= (obj.physProp['vel'][0], terminalY)
obj.pos= (obj.pos[0] + (obj.physProp['vel'][0] * time) + ((accel[0] / 2) * (time ** 2)), obj.pos[1] + (obj.physProp['vel'][1] * time) + ((accel[1] / 2) * (time ** 2)))
for ID in world:
if obj.getRect().colliderect(world[ID].getRect()) == True:
pass
return (obj.pos, obj.physProp['vel'])