第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Pac-Man - 按下并釋放一個鍵后,讓吃豆人保持一個方向移動

Pac-Man - 按下并釋放一個鍵后,讓吃豆人保持一個方向移動

翻翻過去那場雪 2021-12-16 15:06:50
所以,我想用 pygame 模塊在 python3 中編寫 pac-man。但是我不知道一旦按下一個鍵,如何讓吃豆人保持移動。目的是例如按下“向上”鍵,吃豆人將繼續(xù)朝那個方向移動,直到他碰到邊界,即使我松開了鍵。到目前為止,我還沒有對這些邊界進(jìn)行編碼,因為我優(yōu)先考慮吃豆人的連續(xù)運動。我試圖嵌套一個本來應(yīng)該工作的 while 循環(huán),但這顯然給了我一個 phat 運行時錯誤。關(guān)于我如何做到這一點的任何想法?if keys[pygame.K_UP] and (pac.y - pac.radius) > 0:        pac.y -= pac.speed        pac.direction = "UP"    elif keys[pygame.K_DOWN] and (pac.y + 2*(pac.radius) + pac.speed) < height:        pac.y += pac.speed        pac.direction = "DOWN"    elif keys[pygame.K_LEFT] and (pac.x - pac.radius) > 0:        pac.x -= pac.speed        pac.direction = "LEFT"        left = True    elif keys[pygame.K_RIGHT] and (pac.x + 2*pac.radius + pac.speed) < width:        pac.x += pac.speed        pac.direction = "RIGHT"        right = True預(yù)期的結(jié)果是輸入一個方向,pac man 會自己朝那個方向移動,而無需按住鍵。實際上發(fā)生的事情是我最終不得不按住鍵,這樣吃豆人就會朝著想要的方向移動。
查看完整描述

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


查看完整回答
反對 回復(fù) 2021-12-16
?
慕俠2389804

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



查看完整回答
反對 回復(fù) 2021-12-16
?
慕妹3242003

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

希望這對你有用


查看完整回答
反對 回復(fù) 2021-12-16
  • 3 回答
  • 0 關(guān)注
  • 187 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號