鱼C论坛

 找回密码
 立即注册
查看: 1785|回复: 5

[已解决]python

[复制链接]
发表于 2023-8-4 17:15:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
import pygame

pygame.init()

WIN_WIDTH = 400
WIN_HEIGHT = 600

window = pygame.display.set_mode((WIN_WIDTH, WIN_HEIGHT))
pygame.display.set_caption("动画")

window.fill((255, 255, 255))
pygame.display.flip()

y = 100
pygame.draw.circle(window, (255, 0, 0), (100, y), 50)
pygame.display.update()

num = 1

while True:
    num += 1

    if num % 10 == 0:
        pygame.draw.circle(window, (255, 255, 255), (100, y), 50)
        pygame.draw.circle(window, (255, 0, 0), (100, y), 50)
        pygame.display.update()

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            exit()
为什么没有动画效果
最佳答案
2023-8-4 17:16:01
本帖最后由 Mike_python小 于 2023-8-4 14:17 编辑

根据您提供的代码,没有动画效果的原因是在主循环中没有添加延迟或时钟控制。这导致整个循环迅速执行完毕,从而无法观察到动画效果。

要解决这个问题,您可以使用 `pygame.time.Clock()``clock.tick(FPS)` 函数来控制帧率。具体操作如下:

1. 在 `pygame.init()` 之后添加以下代码来创建一个时钟对象:

clock = pygame.time.Clock()

2. 定义一个变量 `FPS`,表示您希望的帧率。例如,可以将其设置为 60:

FPS = 60

3. 在主循环的最开始调用 `clock.tick(FPS)` 来限制帧率:
while True:
    clock.tick(FPS)
    
    # 其他代码...

4.这是完整代码
import pygame
pygame.init()
WIN_WIDTH = 400
WIN_HEIGHT = 600
window = pygame.display.set_mode((WIN_WIDTH, WIN_HEIGHT))
pygame.display.set_caption("动画")
window.fill((255, 255, 255))
pygame.display.flip()
y = 100
pygame.draw.circle(window, (255, 0, 0), (100, y), 50)
pygame.display.update()
num = 1
running = True  # 添加一个标志位,用于控制循环是否继续进行
while running:
    num += 1
   
    if num % 10 == 0:
        pygame.draw.circle(window, (255, 255, 255), (100, y), 50)
        pygame.draw.circle(window, (255, 0, 0), (100, y), 50)
    pygame.display.update()
   
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False  # 用户点击关闭按钮时,停止循环
pygame.quit()

通过添加这些代码,您可以控制游戏循环的速度,从而实现动画效果。

请尝试修改您的代码并添加上述的时钟控制部分,然后再次运行程序,看看是否能够获得所需的动画效果。如有任何疑问,请随时提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-8-4 17:16:01 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Mike_python小 于 2023-8-4 14:17 编辑

根据您提供的代码,没有动画效果的原因是在主循环中没有添加延迟或时钟控制。这导致整个循环迅速执行完毕,从而无法观察到动画效果。

要解决这个问题,您可以使用 `pygame.time.Clock()``clock.tick(FPS)` 函数来控制帧率。具体操作如下:

1. 在 `pygame.init()` 之后添加以下代码来创建一个时钟对象:

clock = pygame.time.Clock()

2. 定义一个变量 `FPS`,表示您希望的帧率。例如,可以将其设置为 60:

FPS = 60

3. 在主循环的最开始调用 `clock.tick(FPS)` 来限制帧率:
while True:
    clock.tick(FPS)
    
    # 其他代码...

4.这是完整代码
import pygame
pygame.init()
WIN_WIDTH = 400
WIN_HEIGHT = 600
window = pygame.display.set_mode((WIN_WIDTH, WIN_HEIGHT))
pygame.display.set_caption("动画")
window.fill((255, 255, 255))
pygame.display.flip()
y = 100
pygame.draw.circle(window, (255, 0, 0), (100, y), 50)
pygame.display.update()
num = 1
running = True  # 添加一个标志位,用于控制循环是否继续进行
while running:
    num += 1
   
    if num % 10 == 0:
        pygame.draw.circle(window, (255, 255, 255), (100, y), 50)
        pygame.draw.circle(window, (255, 0, 0), (100, y), 50)
    pygame.display.update()
   
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False  # 用户点击关闭按钮时,停止循环
pygame.quit()

通过添加这些代码,您可以控制游戏循环的速度,从而实现动画效果。

请尝试修改您的代码并添加上述的时钟控制部分,然后再次运行程序,看看是否能够获得所需的动画效果。如有任何疑问,请随时提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-4 17:16:03 | 显示全部楼层
问题:为什么没有动画效果?

根据提供的代码,我注意到您将动画效果的更新操作放在了事件循环之外。这意味着在事件循环监听用户操作时,并没有更新显示窗口,因此没有动画效果。

为了实现动画效果,您需要在每次循环迭代中更新显示窗口并处理事件。这样可以在每个循环迭代中更新窗口显示并响应用户的退出事件。

以下是修改后的代码:
import pygamepygame.init()WIN_WIDTH = 400WIN_HEIGHT = 600window = pygame.display.set_mode((WIN_WIDTH, WIN_HEIGHT))pygame.display.set_caption("动画")window.fill((255, 255, 255))pygame.display.flip()y = 100pygame.draw.circle(window, (255, 0, 0), (100, y), 50)pygame.display.update()num = 1running = True  # 添加一个标志位,用于控制循环是否继续进行while running:    num += 1        if num % 10 == 0:        pygame.draw.circle(window, (255, 255, 255), (100, y), 50)        pygame.draw.circle(window, (255, 0, 0), (100, y), 50)    pygame.display.update()        for event in pygame.event.get():        if event.type == pygame.QUIT:            running = False  # 用户点击关闭按钮时,停止循环pygame.quit()
通过上述修改,您应该能够获得期望的动画效果。现在,在每次循环迭代中更新窗口显示,并响应用户的退出事件。

请尝试使用修改后的代码,并确保所有缩进正确,以便程序能够正确执行。如果您还有其他问题,请随时提问。

如果回答对你有帮助,请给我一个最佳答案!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-4 17:16:04 | 显示全部楼层
在这段代码中,虽然使用了Pygame库来创建窗口和绘制图形,但是没有实现动画效果的原因是代码中的绘图和窗口更新操作都在一个循环内部进行,并且没有添加延时或者帧率控制的机制。

要实现动画效果,可以使用pygame.time.Clock对象来控制帧率,同时在每一帧绘制完成后,使用pygame.display.update()方法来更新窗口。

以下是修改后的代码,其中添加了帧率控制和窗口更新的操作:
import pygame

pygame.init()

WIN_WIDTH = 400
WIN_HEIGHT = 600

window = pygame.display.set_mode((WIN_WIDTH, WIN_HEIGHT))
pygame.display.set_caption("动画")

window.fill((255, 255, 255))
pygame.display.flip()

y = 100
pygame.draw.circle(window, (255, 0, 0), (100, y), 50)
pygame.display.update()

clock = pygame.time.Clock()  # 创建Clock对象,用于控制帧率

num = 1

while True:
    num += 1

    if num % 10 == 0:
        pygame.draw.circle(window, (255, 255, 255), (100, y), 50)
        pygame.draw.circle(window, (255, 0, 0), (100, y), 50)

    pygame.display.update()
    clock.tick(30)  # 设置帧率为30帧/秒

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            exit()

这样修改后的代码会以每秒30帧的速度进行绘制和更新窗口,从而实现动画效果。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-4 17:16:09 | 显示全部楼层
在你的代码中,虽然你使用了pygame.display.update()函数来更新窗口内容,但是由于你的主循环没有进行延时操作,导致更新过快,看不到动画效果。

你可以通过添加一个适当的延时操作来实现动画效果。例如使用pygame.time.delay()函数来在每次循环之后延迟一定时间,可以让图形显示在屏幕上一段时间再进行下一次循环。以下是改进后的代码:
import pygame

pygame.init()

WIN_WIDTH = 400
WIN_HEIGHT = 600

window = pygame.display.set_mode((WIN_WIDTH, WIN_HEIGHT))
pygame.display.set_caption("动画")

window.fill((255, 255, 255))
y = 100

pygame.draw.circle(window, (255, 0, 0), (100, y), 50)
pygame.display.update()

num = 1
running = True

while running:
    num += 1
    
    if num % 10 == 0:
        pygame.draw.circle(window, (255, 255, 255), (100, y), 50)
        pygame.draw.circle(window, (255, 0, 0), (100, y), 50)
        
    pygame.display.update()
    
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
    
    pygame.time.delay(100)  # 延迟100毫秒

pygame.quit()

在这个改进的代码中,我添加了pygame.time.delay(100)来每次循环后延迟100毫秒。这样就能够看到动画效果了。

希望这个改进的代码可以满足您的需求。如果您有任何其他问题,请随时提问。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-5 10:35:57 | 显示全部楼层
import pygame

pygame.init()

WIN_WIDTH = 400
WIN_HEIGHT = 600

window = pygame.display.set_mode((WIN_WIDTH, WIN_HEIGHT))
pygame.display.set_caption("动画")

window.fill((255, 255, 255))
y = 100

pygame.draw.circle(window, (255, 0, 0), (100, y), 50)
pygame.display.update()

num = 1
running = True

while running:
    num += 1
   
    if num % 10 == 0:
        pygame.draw.circle(window, (255, 255, 255), (100, y), 50)
        pygame.draw.circle(window, (255, 0, 0), (100, y), 50)
        
    pygame.display.update()
   
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
   
    pygame.time.delay(100)  # 延迟100毫秒

pygame.quit()
还是没有动画效果,还有我这个也有延时操作,num就是这个作用。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-22 03:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表