如何解决如何通过按键在pygame中移动图像?
我正在用 pygame 制作一个简单的游戏,我想在其中移动图片,但该图片似乎每次点击时都会制作,这根本不是我想要的,我想通过按一个键来移动它,但每次移动一个
代码:
# 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 应用程序循环必须:
- 通过
pygame.event.pump()
或pygame.event.get()
处理事件。 - 根据输入事件和时间(分别为帧)更新游戏状态和对象位置
- 清除整个显示或绘制背景
- 绘制整个场景(
blit
所有对象) - 通过
pygame.display.update()
或pygame.display.flip()
更新显示 - 限制每秒帧数以限制 CPU 使用率
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。