[英]How can I make a sprite move when key is held down
目前,每次按下一個鍵時,精靈只會移動 1 個像素。 當按住左鍵或右鍵時,如何使水管工精靈不斷移動?
while running:
setup_background()
spriteimg = plumberright
screen.blit(spriteimg,(x1, y1))
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
x1 = x1 + 0
y1 = y1 - 1
elif event.key == pygame.K_DOWN:
x1 = x1 + 0
y1 = y1 + 1
elif event.key == pygame.K_LEFT:
x1 = x1 -1
y1 = y1 + 0
elif event.key == pygame.K_RIGHT:
x1 = x1 + 1
y1 = y1 + 0
pygame.display.flip()
clock.tick(120)
您可以使用pygame.key.get_pressed來做到這一點。
例子:
while running:
keys = pygame.key.get_pressed() #checking pressed keys
if keys[pygame.K_UP]:
y1 -= 1
if keys[pygame.K_DOWN]:
y1 += 1
鍵盤事件(參見pygame.event模塊)僅在按鍵狀態更改時發生一次。 KEYDOWN
事件在每次按下某個鍵時發生一次。 KEYUP
每次釋放一個鍵時發生一次。 將鍵盤事件用於單個操作或逐步移動。
如果要實現連續移動,則必須使用pygame.key.get_pressed()
。 pygame.key.get_pressed()
返回一個包含每個鍵狀態的列表。 如果按住某個鍵,則該鍵的狀態為True
,否則為False
。 使用pygame.key.get_pressed()
評估按鈕的當前狀態並獲得連續移動:
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
x1 -= 1
if keys[pygame.K_RIGHT]:
x1 += 1
if keys[pygame.K_UP]:
y1 -= 1
if keys[pygame.K_DOWN]:
y1 += 1
setup_background()
spriteimg = plumberright
screen.blit(spriteimg, (x1, y1))
pygame.display.flip()
clock.tick(100)
另請參閱鍵和鍵盤事件
最小的例子: repl.it/@Rabbid76/PyGame-ContinuousMovement
import pygame
pygame.init()
window = pygame.display.set_mode((300, 300))
clock = pygame.time.Clock()
rect = pygame.Rect(0, 0, 20, 20)
rect.center = window.get_rect().center
vel = 5
run = True
while run:
clock.tick(60)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
if event.type == pygame.KEYDOWN:
print(pygame.key.name(event.key))
keys = pygame.key.get_pressed()
rect.x += (keys[pygame.K_RIGHT] - keys[pygame.K_LEFT]) * vel
rect.y += (keys[pygame.K_DOWN] - keys[pygame.K_UP]) * vel
rect.centerx = rect.centerx % window.get_width()
rect.centery = rect.centery % window.get_height()
window.fill(0)
pygame.draw.rect(window, (255, 0, 0), rect)
pygame.display.flip()
pygame.quit()
exit()
使用這個伙伴,它會很好用,把它放在你的 for 循環中。
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_a:
playerX_change = -0.1
if event.key == pygame.K_d:
playerX_change = 0.1
if event.type == pygame.KEYUP:
if event.key == pygame.K_a or event.key == pygame.K_d:
playerX_change = 0
playerX += playerX_change
player(playerX, playerY)
pygame.display.update()
一個更簡單的方法可以是:KEYDOWN事件設置一個移動標志。 KEYUP 事件清除標志。 移動過程只需檢查每一幀的標志。 如果設置移動,如果未設置,則不移動。
您可以使用 KEYUP 和 KEYDOWN 事件。 您可以在按鍵按下時連續執行任務,而當按鍵向上時,只需停止該任務
for event in pygame.event.get():
if event.type == pygame.KEYUP:
if event.key==K_DOWN:
print("down key is not pressed")
elif event.type == pygame.KEYDOWN:
if event.key==K_DOWN:
print('down key is not pressed now')
pygame.event.clear() #optional only if your code requires
#this will clear all event and the for loop will executed only once
while running:
spriteimg = plumberright
screen.blit(spriteimg,(x1, y1))
spriteimg_x = 0
spriteimg_y = 0
spriteimg_speed = 0.2
dt = clock.tick(120)
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
x1 = x1 + 0
spriteimg_y -= spriteimg_speed
elif event.key == pygame.K_DOWN:
x1 = x1 + 0
spriteimg_y += spriteimg_speed
elif event.key == pygame.K_LEFT:
spriteimg_x -= spriteimg_speed
y1 = y1 + 0
elif event.key == pygame.K_RIGHT:
spriteimg_y -= spriteimg_speed
y1 = y1 + 0
x1 += spriteimg_speed * dt
y1 += spriteimg_speed * dt
這條路怎么樣? 而且...我認為蜱的價值是如此之高..無論如何,我希望這種方式對您有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.