我想使用W和S移动左桨,但是每当我点击键时桨不移动。我只学了几个月的python和几个星期的pygame,所以如果这是一个非常明显的错误,那就是为什么。
下面是主要的游戏循环:
while not x:
for event in pygame.event.get():
if event.type == pygame.QUIT:
x = True #quits the game when you press X
if event.type == pygame.KEYUP: #makes start screen go away
if event.key == pygame.K_RETURN:
gamescreen()
ball = Ball(window, white, 350, 220, 7)
p1Paddle = Paddle(window, blue, 50, 180, 10, 60)
p2Paddle = Paddle(window, red, 630, 180, 11, 60)
#moves the paddles
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_w: #supposed to make the paddle go up
p1Paddle.state = 'up'
print('up')
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_s: #supposed to make the paddle go down
p1Paddle.state = 'down'
p1Paddle.move()
print('down')
pygame.display.update()
clock.tick(45)
这是桨函数/类
class Paddle:
def __init__(self, screen, colour, posX, posY, width, height):
self.screen = screen
self.colour = colour
self.posX = posX
self.posY = posY
self.width = width
self.height = height
self.state = 'stopped'
self.show()
def show(self):
pygame.draw.rect(self.screen, self.colour, (self.posX, self.posY, self.width, self.height))
def move(self):
if self.state == 'up':
self.posY -= 10
elif self.state == 'down':
self.posY += 10
(我还没有机会添加第二个桨的控制;一旦我解决了这个问题,我就会去那里。)它打印'上'和'下',所以我知道它在某种程度上是有效的。
您需要在应用程序循环之前而不是在应用程序循环中创建对象。但是你必须在应用程序循环中的每一帧中的新位置绘制对象:
p1Paddle = Paddle(window, blue, 50, 180, 10, 60)
p2Paddle = Paddle(window, red, 630, 180, 11, 60)
ball = Ball(window, white, 350, 220, 7)
while not x:
# handle events
for event in pygame.event.get():
if event.type == pygame.QUIT:
x = True
# [...] more events
# clear screen
window.fill(0)
# draw objects
p1Paddle.show()
p2Paddle.show()
ball.show()
# update display
pygame.display.update()
clock.tick(45)
典型的PyGame应用程序循环必须:
- 限制每秒帧数以限制
pygame.time.Clock.tick
的CPU使用 - 通过调用
pygame.event.pump()
或pygame.event.get()
处理事件。 - 根据输入事件和时间(分别为帧)更新游戏状态和对象位置
- 清除整个显示或绘制背景
- 绘制整个场景(
blit
所有对象) - 通过调用
pygame.display.update()
或pygame.display.flip()
更新显示