微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何通过按键在pygame中移动图像?

如何解决如何通过按键在pygame中移动图像?

我正在用 pygame 制作一个简单的游戏,我想在其中移动图片,但该图片似乎每次点击时都会制作,这根本不是我想要的,我想通过按一个键来移动它,但每次移动一个

screen shot

代码

# import modules
import pygame
from pygame.locals import *
import sys
import os
#################
pygame.init()
#################

#Colors
red = (255,0) # RED
green = (0,255,0) # GREEN
blue = (10,60,225) # BLUE
white = (255,255) # WHITE
black = (0,0) # BLACK

# window
window = pygame.display.set_mode((600,400)) # window size
pygame.display.set_caption("Ball away") # title
window.fill(white) # backgrond color
img = pygame.image.load("bin/images/icon.png") # window icon
pygame.display.set_icon(img) # load icon

# screen
#lines
lineup = pygame.draw.line(window,black,(0,35),(100000,0),4)
linedown = pygame.draw.line(window,350),(1000000,4),4)
#TEXTS
ping_text = "Ping : 50"
font = pygame.font.SysFont(None,25)
t_p = font.render(ping_text,True,0))
window.blit(t_p,(515,10))

count_win = "0 - 0"
font = pygame.font.SysFont(None,30)
c_w = font.render(count_win,0))
window.blit(c_w,(284,10))


exit_ico = pygame.image.load("bin/images/exit.png")
exit_i = pygame.transform.scale(exit_ico,(30,30))
window.blit(exit_i,(3,3))

# players
    # RED
P1_x = 3
P1_y = 140
speed = 5

Player_RED = pygame.image.load("bin/images/Player1_RED.png")
player1_red = pygame.transform.scale(Player_RED,(80,85))

    # BLUE
P2_x = 520
P2_y = 145
speed = 5

Player_BLUE = pygame.image.load("bin/images/Player2_BLUE.png")
player2_blue = pygame.transform.scale(Player_BLUE,85))

# ball
Ball_lets = pygame.transform.scale(img,(35,35))
window.blit(Ball_lets,(300,170))

# soundobj = pygame.mixer.sound('bin/sounds/Music.mp3')
# soundobj.play()

# main loop
running = True
while running:
    
    
    for event in pygame.event.get():
        if event.type == QUIT:
            os.system('cls')
            running = False
            
        if event.type == KEYUP:
            if event.key == K_w:
                P1_y -= speed
            if event.key == K_s:
                P1_y += speed
        window.blit(player1_red,(P1_x,P1_y))

        if event.type == KEYUP:
            if event.key == K_UP:
                P2_y -= speed
            if event.key == K_DOWN:
                P2_y += speed
        window.blit(player2_blue,(P2_x,P2_y))

    pygame.display.update()
pygame.quit()
sys.exit()

缩进不是我的问题,我是 stackoverflow 的新手

请帮忙

解决方法

您必须使用 pygame.key.get_pressed() 而不是键盘事件。

键盘事件(参见 pygame.event 模块)仅在键的状态改变时发生一次。 KEYDOWN 事件在每次按下键时发生一次。 KEYUP 每次释放键时出现一次。将键盘事件用于单个操作或逐步移动。

pygame.key.get_pressed() 返回一个包含每个键状态的列表。如果某个键被按下,则该键的状态为 True,否则为 False。使用 pygame.key.get_pressed() 评估按钮的当前状态并获得连续移动。

# main loop
clock = pygame.time.Clock()
running = True
while running:
    clock.tick(60)
    for event in pygame.event.get():
        if event.type == QUIT:
            os.system('cls')
            running = False

    keys = pygame.key.get_pressed()
    if keys[pygame.K_w]:
        P1_y -= speed
    if keys[pygame.K_s]:
        P1_y += speed
    if keys[pygame.K_UP]:
        P2_y -= speed
    if keys[pygame.K_DOWN]:
        P2_y += speed
   
    window.fill(0)
    window.blit(t_p,(515,10))
    window.blit(c_w,(284,10))
    window.blit(exit_i,(3,3))
    window.blit(Ball_lets,(300,170))
    window.blit(player1_red,(P1_x,P1_y))
    window.blit(player2_blue,(P2_x,P2_y))
    pygame.display.update()

注意,您必须在每一帧中重新绘制整个场景。典型的 PyGame 应用程序循环必须:

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。