3 回答
TA贡献1865条经验 获得超7个赞
当按键被按下时直接移动你的 pacman 对你的程序不起作用。您应该在此处设置吃豆人的速度或其他内容,并将其应用于另一个函数中的每一帧。
def update():
pac.y += pac.yspeed
pac.x += pac.xspeed
while True:
clock.tick(60)
if keys[pygame.K_UP] and (pac.y - pac.radius) > 0:
pac.yspeed = 1
elif keys[pygame.K_DOWN] and (pac.y + 2*(pac.radius) + pac.speed) < height:
pac.yspeed = -1
elif keys[pygame.K_LEFT] and (pac.x - pac.radius) > 0:
pac.xspeed = -1
left = True
elif keys[pygame.K_RIGHT] and (pac.x + 2*pac.radius + pac.speed) < width:
pac.xspeed = 1
right = True
if keys[pygame.K_ESC]:
break
update()
# Do all your other stuff
TA贡献1719条经验 获得超6个赞
我建议在你的 Pac-Man 类中创建一个对象来跟踪 Pac-Man 应该移动的方向(基本上你pac.direction已经设置了)。对于每个移动迭代,不是检查您的键映射,而是检查pac.direction并执行它所说的操作。如果你想保持你的代码大部分是这样的话,基本上让它看起来与这个相似:
if pac.direction == "UP" and (pac.y - pac.radius) > 0:
pac.y -= pac.speed
elif pac.direction == "DOWN" and (pac.y + 2*(pac.radius) + pac.speed) < height:
pac.y += pac.speed
elif pac.direction == "LEFT" and (pac.x - pac.radius) > 0:
pac.x -= pac.speed
left = True
elif pac.direction == "RIGHT" and (pac.x + 2*pac.radius + pac.speed) < width:
pac.x += pac.speed
right = True
然后您只需要pac.direction在获得代码之前在按下某个键时设置为正确的值。我必须承认,我不熟悉 PyGame,所以我将把它留给读者。
或者,您可以通过确定表单的方向来将其压缩很多pac.direction = (xSpeed, ySpeed)。然后你的代码压缩到(没有可以在行之前完成的边界检查):
pac.x += pac.direction[0] # Could be pac.direction.x if you use an object instead of a tuple
pac.y += pac.direction[1] # Same as above with pac.direction.y
left = pac.direction[0] > 0 # I'm unsure why you're doing left and right separately, so I'll just put left
TA贡献1824条经验 获得超6个赞
为什么不使用变量来存储最近的方向
while True:
if keys[pygame.K_UP] and (pac.y - pac.radius) > 0:
recent_direction = 'UP'
elif keys[pygame.K_DOWN] and (pac.y + 2*(pac.radius) + pac.speed) < height:
recent_direction = 'DOWN'
elif keys[pygame.K_LEFT] and (pac.x - pac.radius) > 0:
recent_direction = 'LEFT'
elif keys[pygame.K_RIGHT] and (pac.x + 2*pac.radius + pac.speed) < width:
recent_direction = 'RIGHT'
while True:
if recent_direction == 'UP':
pac.y -= pac.speed
elif recent_direction == 'DOWN':
pac.y += pac.speed
if recent_direction == 'LEFT':
pac.x -= pac.speed
if recent_direction == 'RIGHT':
pac.x += pac.speed
希望这对你有用
添加回答
举报
