pygame 中的跟踪图像
tracing image in pygame
最近我一直在尝试用 Pygame 创建一个乒乓球游戏,但我似乎无法弄清楚为什么?或者当我在游戏中将球设为移动物体时球是如何开始追踪的。我该如何解决这个问题?
import pygame, sys
def ball_ani():
global speedx, speedy
ball.x += speedx
ball.y += speedy
if ball.top <= 0 or ball.bottom >= h:
speedy *= -1
if ball.left <= 0 or ball.right >= w:
speedx *= -1
if ball.colliderect(player) or ball.colliderect(player2):
speedx *= -1
pygame.init()
clock = pygame.time.Clock()
w, h = 1000, 500
pygame.display.set_caption('Fut Pong')
win = pygame.display.set_mode((w, h))
win.fill("black")
pygame.draw.line(win, "white", (w//2, 0), (w//2, h), 3)
ball = pygame.Rect(w//2 - 10, h//2 - 10, 20, 20)
player = pygame.Rect(w - 15, h//2 - 50, 10, 100)
player2 = pygame.Rect(5, h//2 - 50, 10, 100)
speedx, speedy = 7, 7
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
ball_ani()
pygame.draw.ellipse(win, "green", ball)
pygame.draw.rect(win, "white", player)
pygame.draw.rect(win, "white", player2)
pygame.display.flip()
clock.tick(60)
您必须在每一帧清除显示:
run = True
while run:
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = Fasle
ball_ani()
win.fill("black") # <--- this is missing
pygame.draw.ellipse(win, "green", ball)
pygame.draw.rect(win, "white", player)
pygame.draw.rect(win, "white", player2)
pygame.display.flip()
clock.tick(60)
pygame.quit()
exit()
典型的 PyGame 应用程序循环必须:
- 限制每秒帧数以限制 CPU 使用
pygame.time.Clock.tick
- 通过调用
pygame.event.pump()
or pygame.event.get()
. 来处理事件
- 根据输入事件和时间(分别为帧)更新对象的游戏状态和位置
- 清除整个显示或绘制背景
- 绘制整个场景(
blit
所有对象)
- 通过调用
pygame.display.update()
or pygame.display.flip()
更新显示
最近我一直在尝试用 Pygame 创建一个乒乓球游戏,但我似乎无法弄清楚为什么?或者当我在游戏中将球设为移动物体时球是如何开始追踪的。我该如何解决这个问题?
import pygame, sys
def ball_ani():
global speedx, speedy
ball.x += speedx
ball.y += speedy
if ball.top <= 0 or ball.bottom >= h:
speedy *= -1
if ball.left <= 0 or ball.right >= w:
speedx *= -1
if ball.colliderect(player) or ball.colliderect(player2):
speedx *= -1
pygame.init()
clock = pygame.time.Clock()
w, h = 1000, 500
pygame.display.set_caption('Fut Pong')
win = pygame.display.set_mode((w, h))
win.fill("black")
pygame.draw.line(win, "white", (w//2, 0), (w//2, h), 3)
ball = pygame.Rect(w//2 - 10, h//2 - 10, 20, 20)
player = pygame.Rect(w - 15, h//2 - 50, 10, 100)
player2 = pygame.Rect(5, h//2 - 50, 10, 100)
speedx, speedy = 7, 7
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
ball_ani()
pygame.draw.ellipse(win, "green", ball)
pygame.draw.rect(win, "white", player)
pygame.draw.rect(win, "white", player2)
pygame.display.flip()
clock.tick(60)
您必须在每一帧清除显示:
run = True
while run:
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = Fasle
ball_ani()
win.fill("black") # <--- this is missing
pygame.draw.ellipse(win, "green", ball)
pygame.draw.rect(win, "white", player)
pygame.draw.rect(win, "white", player2)
pygame.display.flip()
clock.tick(60)
pygame.quit()
exit()
典型的 PyGame 应用程序循环必须:
- 限制每秒帧数以限制 CPU 使用
pygame.time.Clock.tick
- 通过调用
pygame.event.pump()
orpygame.event.get()
. 来处理事件
- 根据输入事件和时间(分别为帧)更新对象的游戏状态和位置
- 清除整个显示或绘制背景
- 绘制整个场景(
blit
所有对象) - 通过调用
pygame.display.update()
orpygame.display.flip()
更新显示