我似乎无法在程序中找到错误。程序将运行没有错误,但我的桨图像不会移动。我花了几个小时研究并尝试了多种不同的变化。我使用的是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)
答案 0 :(得分:2)
来自文档:
move()
返回由给定偏移量移动的新矩形。
x
和y
参数可以是任何整数值,正数或负数。
move_ip()
与
Rect.move()
方法相同,但在适当的位置运行。
如果您在self.rect.move(self.paddle_speed_d)
中将self.rect.move_ip(self.paddle_speed_d)
更改为move_d()
,则可以执行此操作(同样适用于move_u()
。
(这仍然存在move_d()
仅在按下键时调用的问题。这意味着您必须反复按下向下键才能移动您的球拍。这可能是您想要的,但如果不是,请考虑有一个更新功能在每个循环上移动球拍,并让move_d()
和move_u()
设置球拍的速度。)
答案 1 :(得分:-1)
感谢您尝试提供帮助,但我发现了我的问题。我保存图像的格式没有显示移动。我改变了我的形象,现在它起作用了。