3 回答

TA貢獻(xiàn)1865條經(jīng)驗 獲得超7個贊
當(dāng)按鍵被按下時直接移動你的 pacman 對你的程序不起作用。您應(yīng)該在此處設(shè)置吃豆人的速度或其他內(nèi)容,并將其應(yīng)用于另一個函數(shù)中的每一幀。
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貢獻(xiàn)1719條經(jīng)驗 獲得超6個贊
我建議在你的 Pac-Man 類中創(chuàng)建一個對象來跟蹤 Pac-Man 應(yīng)該移動的方向(基本上你pac.direction已經(jīng)設(shè)置了)。對于每個移動迭代,不是檢查您的鍵映射,而是檢查pac.direction并執(zhí)行它所說的操作。如果你想保持你的代碼大部分是這樣的話,基本上讓它看起來與這個相似:
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在獲得代碼之前在按下某個鍵時設(shè)置為正確的值。我必須承認(rèn),我不熟悉 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貢獻(xiàn)1824條經(jīng)驗 獲得超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
希望這對你有用
添加回答
舉報