pygame 带有事件的示例代码

pygame sample code with events

我似乎无法在我的程序中找到错误。该程序将 运行 没有错误但是,我的桨图像不会移动。我花了数小时研究并尝试了多种不同的更改。我正在使用 python 3.4.1。我的目标是创建一种桨式游戏。谢谢。

# Python game
import pygame
import sys

pygame.init()

ball_image = pygame.image.load("ball.png")
ballrect = ball_image.get_rect()
paddle_image = pygame.image.load("paddle.png")
paddlerect = paddle_image.get_rect()

screen_w = 825
screen_h = 727
size = [screen_w, screen_h]

speed = [1, 1]
black = (0, 0, 0)
blue = (0,0,255)

screen = pygame.display.set_mode(size)

class paddle(object):

    paddle_speed = [0, 0]
    paddle_speed_d = [0, -1]
    paddle_speed_u = [0, 1]

    image = paddle_image
    rect = image.get_rect()
    x = 20
    y = screen_h / 2
    w = rect.width
    h = rect.height

    def __init__(self, side):
        self.side = side

        if side == "l":
            x == width - 20 - w

    def move_d(self):
        self.rect.move(self.paddle_speed_d)

    def move_u(self):
        self.rect.move(self.paddle_speed_u)

pad1 = paddle("r")
#pad2 = paddle("l")

while 1:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_DOWN:
                pad1.move_d()
            if event.key == pygame.K_UP:
                pad1.move_u()

    ballrect = ballrect.move(speed)

    if ballrect.left < 0 or ballrect.right > screen_w:
        speed[0] = -speed[0]

    if ballrect.top < 0 or ballrect.bottom > screen_h:
        speed[1] = -speed[1]

    #if ballrect.bottom == 0:
        #ballrect.y = screen_h

    #if ballrect.top == screen_h:
        #ballrect.bottom = 0

    screen.fill(black)
    screen.blit(ball_image, ballrect)
    screen.blit(pad1.image, pad1.rect)
    pygame.display.flip()
    pygame.time.wait(1)

来自文档:

move()

Returns a new rectangle that is moved by the given offset. The x and y arguments can be any integer value, positive or negative.

move_ip()

Same as the Rect.move() method, but operates in place.

如果您在 move_d() 中将 self.rect.move(self.paddle_speed_d) 更改为 self.rect.move_ip(self.paddle_speed_d),那应该可以解决问题(对于 move_u().

也是如此

(这仍然存在 move_d() 仅在按下键时调用的问题。这意味着您必须反复按下向下键才能移动桨。这可能是您想要的,但如果不是,考虑让更新函数在每个循环中移动桨,并让 move_d()move_u() 设置桨的速度。)

感谢您的帮助,但我发现了我的问题。我保存图像的格式没有显示运动。我更改了图像,现在可以使用了。