嗨,我是Python的新手,现在我想了解pygame的基本原理
我写了我的代码,一旦按下空格键,我试图使球上升一点。
这是我的代码:
import pygame
import sys
def check_events(ball):
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
ball.centery -= 10
class Ball():
def __init__(self,screen):
self.screen=screen
self.rect=self.screen.get_rect()
self.color=(255,255,255)
self.centerx = self.rect.centerx
self.centery = self.rect.centery
self.radius=20
def showcircle(self):
pygame.draw.circle(self.screen, self.color, (self.centerx,self.centery), self.radius)
pygame.init()
screen = pygame.display.set_mode((1000,1000))
screen.fill((20,20,20))
ball=Ball(screen)
while True:
check_events(ball)
ball.showcircle()
pygame.display.update()
按几次空格键后,结果就是这样
我的问题是为什么仍然显示球的先前位置而不是在更新之后 再次按空格键 拜托,我希望你能帮助我 预先感谢
答案 0 :(得分:2)
您需要清除每一帧的屏幕
while True:
check_events(ball)
screen.fill((20,20,20)) # clear screen
ball.showcircle()
pygame.display.update()
答案 1 :(得分:1)
基本上,球的运动使它之前占据的每个位置都留下了“痕迹”。您需要以某种方式擦除旧副本。
有两种方法可以解决此问题。许多PyGame程序(大多数?)选择从头开始每个框架重新绘制屏幕。这是一种简单的方法,可以轻松处理移动的对象。但是,根据程序的不同,这可能在计算上也很繁琐。
另一种方法称为“脏矩形”,它仅重绘了您要撤消的操作所影响的屏幕部分(“脏”部分)。在您的情况下,它将删除球的旧图像(在先前的位置)。在这里,您可以绘制背景色的球,然后移动并绘制新球。或者,将背景像素保存在下一个球所在的“下方”。移动球时,通过替换背景将其擦除。
由于您说您才刚刚开始,所以最简单的方法是在每次更新时从头开始重新绘制屏幕。因此,正如@ Mike67回答的那样,对于每次更新,请在整个屏幕上填充颜料,然后在新位置重新绘制球。