簡體   English   中英

如何通過按住按鈕讓pygame中的對象移動?

[英]How do I get my object in pygame to move by holding the button?

我嘗試使用這樣的東西,但它沒有用。

while running:
keys = pygame.key.get_pressed()  #checking pressed keys
if keys[pygame.K_UP]:
    y1 -= 1
if keys[pygame.K_DOWN]:
    y1 += 1

這是我目前的代碼。 我嘗試使用不同的方法,因為上述方法對我不起作用。 它一次按下一個按鈕。

import pygame
spaceX = 100
spaceY = 100
pygame.init
black = (0,0,0)
size = (800, 800)
screen = pygame.display.set_mode(size)

def game(spaceX, spaceY):
    spaceship_file = 'spaceship.png'
    spaceship_image = pygame.image.load(spaceship_file)
    spaceship = pygame.transform.scale(spaceship_image, (30, 30))
    screen.fill(black)
    screen.blit(spaceship, (spaceX, spaceY))
    pygame.display.flip()

    while True:
        for event2 in pygame.event.get():
            if event2.type == pygame.KEYDOWN and event2.key == pygame.K_LEFT:
                spaceX2 = spaceX - 5
                game(spaceX2, spaceY)

            elif event2.type == pygame.KEYDOWN and event2.key == pygame.K_RIGHT:
                spaceX2 = spaceX + 5
                game(spaceX2, spaceY)

game(spaceX, spaceY)

編輯:

我現在有這個代碼。 我的對象仍然只在我反復點擊按鈕時移動,而不是在我按住它時移動。

def game(spaceX, spaceY):

    while True:
        screen.fill(black)
        screen.blit(spaceship, (spaceX, spaceY))
        pygame.display.flip()
        keys = pygame.key.get_pressed()

        for event in pygame.event.get():
            if keys[pygame.K_LEFT]:
                spaceX = spaceX - 5
                game(spaceX, spaceY)

            elif keys[pygame.K_RIGHT]:
                spaceX = spaceX + 5
                game(spaceX, spaceY)

有兩種方法可以檢查密鑰輸入,無論它們是在事件隊列中還是檢查它們的當前狀態。

事件隊列

當按下或重新按下按鍵時,它們會被放入事件隊列中,因此您無法直接判斷按鍵是否被保留。 有兩種方法:

  1. 在進入主循環之前調用pygame.key.set_repeat(True) 這將重復將KEYDOWN事件放入事件隊列中,只要它被保持。

  2. 引入速度變量。 當用戶按下鍵時將速度設置為某個速度,並在用戶抬起鍵時將速度設置為0。

例如:

for event in pygame.event.get():
    if event.type == pygame.KEYDOWN:
        if event.key == pygame.K_LEFT:
            velocity_x = -5
        elif event.key == pygame.K_RIGHT:
            velocity_x = 5
    elif event.type == pygame.KEYUP:
        if event.key == pygame.K_LEFT:
            velocity_x = 0
        elif event.key == pygame.K_RIGHT:
            velocity_x = 0

position_x += velocity_x

國家檢查

通過調用pygame.key.get_pressed()獲得鍵的當前狀態。 你必須調用pygame.event中的一個函數,以便pygame執行一些必需的內部操作,所以如果你不想使用事件隊列,請使用pygame.event.pump() 如果不這樣做,你的操作系統會認為pygame已經崩潰,導致游戲沒有響應。 雖然,您通常希望處理pygame.QUIT事件,因此用戶可以退出。

pygame.event.pump()
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
    position_x -= 5
elif keys[pygame.K_RIGHT]:
    position_x += 5

這個問題的一個解決方案是使用set_repeat函數

pygame.key.set_repeat(True)

這將生成多個KEYDOWN事件。

嘗試將鍵添加到你的pygame for循環中。 所以看起來應該是這樣的......

while running:
for event in pygame.event.get():
    keys = pygame.key.get_pressed()  #checking pressed keys
        if keys[pygame.K_UP]:
        y1 -= 1

        if keys[pygame.K_DOWN]:
        y1 += 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM