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()
设置桨的速度。)
感谢您的帮助,但我发现了我的问题。我保存图像的格式没有显示运动。我更改了图像,现在可以使用了。
我似乎无法在我的程序中找到错误。该程序将 运行 没有错误但是,我的桨图像不会移动。我花了数小时研究并尝试了多种不同的更改。我正在使用 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
andy
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()
设置桨的速度。)
感谢您的帮助,但我发现了我的问题。我保存图像的格式没有显示运动。我更改了图像,现在可以使用了。