如何解决如何在屏幕上从左到右为对象设置动画而不拖尾?
我怎样才能让我的绘制云功能在我的屏幕上只从左到右移动一次而不创建轨迹?我尝试将我的 for 循环移动到我的 while 循环中,但没有奏效。
import pygame
pygame.init()
size = (640,480)
win = pygame.display.set_mode(size)
width = win.get_width()
height = win.get_height()
blue = (135,255,255)
def draw_cloud(x,y,size):
pygame.draw.circle(win,(255,255),(x,y),int(size* .5))
pygame.draw.circle(win,(int(x + size * .5),int(size * .6))
pygame.draw.circle(win,(x + size,int(y - size * .1)),int(size * .4))
pygame.draw.rect(win,(0,160,3),400,640,80))
pygame.draw.rect(win,(135,400))
for i in range(60,600,100):
draw_cloud(i,120,80)
pygame.display.update()
running = True
myClock = pygame.time.Clock()
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
myClock.tick(60)
pygame.quit()
解决方法
您已在应用程序循环中连续绘制整个场景,并且必须使用 fill()
清除背景:
import pygame
pygame.init()
size = (640,480)
win = pygame.display.set_mode(size)
myClock = pygame.time.Clock()
width = win.get_width()
height = win.get_height()
blue = (135,255,255)
def draw_cloud(x,y,size):
pygame.draw.circle(win,(255,255),(x,y),int(size* .5))
pygame.draw.circle(win,(int(x + size * .5),int(size * .6))
pygame.draw.circle(win,(x + size,int(y - size * .1)),int(size * .4))
x = 640
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
win.fill(0)
pygame.draw.rect(win,(0,160,3),400,640,80))
pygame.draw.rect(win,(135,400))
draw_cloud(x,120,80)
pygame.display.update()
x -= 1
if x < -120:
x = 640
myClock.tick(60)
pygame.quit()
典型的 PyGame 应用程序循环必须:
- 通过
pygame.event.pump()
或pygame.event.get()
处理事件。 - 根据输入事件和时间(分别为帧)更新游戏状态和对象位置
- 清除整个显示或绘制背景
- 绘制整个场景(
blit
所有对象) - 通过
pygame.display.update()
或pygame.display.flip()
更新显示 - 限制每秒帧数以限制 CPU 使用率
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。