我有两个精灵:一个机器人精灵和一个障碍精灵。我正在使用 mask.overlap 来确定是否存在重叠以防止机器人进入障碍物区域(它起到阻挡障碍物的作用)。下面是运动评估代码的一部分。它会测试移动是否会导致碰撞:
if pressed_keys[pygame.K_s]:
temp_position = [robot.rect.x, robot.rect.y]
temp_position[1] += speed
offset_x = temp_position[0] - obstacle.rect.x
offset_y = temp_position[1] - obstacle.rect.y
overlap = obstacle.mask.overlap(robot.mask, (offset_x, offset_y))
if overlap is None:
robot.rect.y += speed
else:
# adjust the speed to make the objects perfectly collide
此代码有效。如果移动会导致碰撞,则它会阻止机器人移动。
问题
对于高速,代码会阻止其正常移动,但会在机器人和障碍物之间留下视觉间隙。
例如:如果速度为 30,两个障碍物相距 20 像素,则代码将阻止移动,因为会导致碰撞。但留下了 20 像素的差距。
目标
如果发生碰撞,将速度调整到剩余像素距离(如示例中的 20 像素),以便机器人和障碍物完美碰撞。机器人不能移动 30,但他可以移动 20。我如何计算剩余距离?
慕仙森
侃侃尔雅
相关分类