import pygame,sys pygame.init() speed = [1,1] black = 0,0,0 white = 255,255,25+ size = width,height = 600,400 screen = pygame.display.set_mode(size) pygame.display.set_caption('pyzrun') ball = pygame.draw.circle(screen,white,(400,300),30) fsp = 300 fspclock = pygame.time.Clock() while True: for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() ballrect = ball.move(speed[0],speed[1]) if ballrect.left < 0 or ballrect.right > width: speed[0]=-speed[0] if ballrect.top < 0 or ballrect.bottom > height: speed[1]=-speed[1] screen.fill(black) screen.blit(ball) pygame.display.update() fspclock.tick(fsp)
ball = pygame.draw.circle(screen,white,(400,300),30)
#画圆实现的是rect对象
screen.blit(ball)
#blit函数中期望的是Surface对象,而ball是rect对象,故产生报错
解决方案1:ball可以引入一个surface对象来作为blit的参数,比如pygame.image.load("D:\\xx\xx.png") 随后该图片的坐标rect数据等可以使用ballrect = ball.get_rect()来获取;用引入的图片来替代自己画圆
参考代码:
import pygame,sys
pygame.init()
speed = [1,1]
black = 0,0,0
white = 255,255,255
size = width,height = 600,400
screen = pygame.display.set_mode(size)
pygame.display.set_caption('pyzrun')
#ball = pygame.draw.circle(screen,white,(400,300),30,1)
ball = pygame.image.load('C:\\xx\\xx\\xx\\Aqua Ball.png')
ballrect = ball.get_rect()
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
#ballrect = ball.move(speed[0],speed[1])
ballrect = ballrect.move(speed)
if ballrect.left < 0 or ballrect.right > width:
speed[0]=-speed[0]
if ballrect.top < 0 or ballrect.bottom > height:
speed[1]=-speed[1]
screen.fill(black)
screen.blit(ball,ballrect)
pygame.display.flip()
解决方案2:可以自己画圆,但是要注意pygame第三方库中的函数使用要求,在使用时注意函数的参数要求等