python - 如何修复我的 pygame 脚本中的运动?
问题描述
我正在尝试为我的第一个项目在 pygame 中制作 pong 的复制品,但是当我尝试移动我的桨时,它们反而会伸展。我相信原因是每次我尝试移动它时它都会创建一个新的矩形,但我似乎无法弄清楚为什么。请检查代码并帮助纠正我的错误。这是我的代码:
import pygame
W, H = 600, 500
screen = pygame.display.set_mode((W, H))
FPS = 30
class Paddle(pygame.sprite.Sprite):
def __init__(self, x, y, width, height):
super(Paddle, self).__init__()
self.x = x
self.y = y
self.width = width
self.height = height
self.surf = pygame.Surface((width, height))
self.surf.fill((255, 255, 255))
self.rect = self.surf.get_rect()
self.rect.center = (x, y)
def move(self, distance):
self.rect.move_ip(0, distance)
paddleA = Paddle(15, 250, 10, 50)
paddleB = Paddle(585, 250, 10, 50)
allSprites = pygame.sprite.Group()
allSprites.add(paddleA)
allSprites.add(paddleB)
run = True
clock = pygame.time.Clock()
while run:
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
run = False
pressedKeys = pygame.key.get_pressed()
if pressedKeys[pygame.K_UP]:
paddleB.move(-5)
elif pressedKeys[pygame.K_DOWN]:
paddleB.move(5)
elif pressedKeys[pygame.K_w]:
paddleA.move(-5)
elif pressedKeys[pygame.K_s]:
paddleA.move(5)
for sprite in allSprites:
screen.blit(sprite.surf, sprite.rect)
pygame.display.update()
clock.tick(FPS)
pygame.quit()
quit()
解决方案
在绘制新的之前,rect
您应该用背景颜色填充屏幕,以删除旧的rect
. 否则旧的仍然画在那里,你只是在旧的上画新的。这就像在旧画上画新画。
screen.fill(color, rect)
应该做的伎俩。
推荐阅读
- python - 将列添加到数据框 K-Mean - Python
- python - 如何使用 python 和 webdriver 在标签之间获取文本?
- apache-spark - Spark:YARN 在 NettyMemoryMetrics 上抛出 NoSuchMethodError
- python - 登录后有条件地重定向用户
- javascript - setState 不呈现(在 ftech 中获取)
- python - C++纯虚函数和python中的this指针
- machine-learning - 随机梯度下降增加成本函数
- vba - 识别以逗号分隔的字符串的新增内容
- python - 芹菜开始执行任务很慢
- python-3.x - 了解 .format 方法