Python之pygame让图形动起来(4)

您所在的位置:网站首页 图形的运动画图怎么画 Python之pygame让图形动起来(4)

Python之pygame让图形动起来(4)

2024-07-05 21:56| 来源: 网络整理| 查看: 265

pygame移动图形

上篇说到绘制图形,今天我们把绘制的图形进行移动!

说起移动图形,我们需要了解下相关的知识!

绘制的参数里面第一个是绘制的 “表面”;

水平是X轴,

垂直是Y轴,

这个“表面”我们可以当做一个画布,我们在上面绘制我们需要的形状;

绘制完成后,我们更新下画板图像就展现在我们面前了。

要我们图像动起来,那么就一次次的绘制我们想要移动的图形,并且更新画面就可以了!

我们想象中的效果:

但是 如果我们只是在pygame中重新移动方块则实际效果不是我们看到的效果。

其实就是我们在绘制一个一个的方块,并没有清除上一个方块,这样就形成了图上我们看到的场景。

就如下图,绘制一个个方块,原来的方块还在。

怎么解决这个问题呢?

我们都见过这样的翻页画。

在一张新的纸上绘制与上一张不一样的画面,然后我们翻动纸张,那样画面就动了起来;那在我们pygame上,我们也在一张新的纸上绘制不就可以了吗?

代码语言:javascript复制# 定义的画布对象,中使用fill方法绘制新的背景screen.fill((255,255,255)) # 传递背景颜色的参数

再次运行就达到我们要的效果了!

我们还有个事情考虑下,就是我们看翻页画的时候看到纸张一页一页的翻动,在pygame里面也可以指定翻页的速度!

这个速度在动态效果里面的单位是‘帧’;

所谓的‘帧’就是在1秒内我们翻动了多少页纸,

帧率越大,我们看到方块移动的速度就越快,反之就越慢。

定义刷新的帧率:

代码语言:javascript复制# 定义频率clock = pygame.time.Clock()

然后我们在循环事件中设置刷新的帧率:

代码语言:javascript复制# 设定刷新帧率clock.tick(60) # 越大刷新的越快

说了上面这么多话,到底怎么移动呢?

其实,我们在绘制的时候使用一个变量,放在绘制的图形参数内。

每次对变量进行操作就可以让形状动起来!

绘制的图形,会返回一个 rect(x轴,Y轴,宽,高)

我们可以接收这个参数,来获取绘制图形的位置,来进行重新绘制移动的方向或者大小!

有了这些知识,我们就可以让形状简单的动起来了。

全部代码:

代码语言:javascript复制import pygame def rungame(): # 分辨率 800 * 600 win = (100, 100) # 一般情况我们都只是设置一个固定大小的窗口 screen = pygame.display.set_mode(win) # 设置当前窗口标题 pygame.display.set_caption('绘制基础图像!') # 设置窗口的背景色 screen.fill((255, 255, 255)) # 设置游戏时钟 clock = pygame.time.Clock() x, y = 0, 0 # 方块的起点 width, height = 20, 20 # 方块的宽,高 print(screen) # b = pygame.draw.rect(screen, (0,255,0), [20, 20, 20, 20], 0) # 开启一个事件循环处理发生的事件 while True: clock.tick(60) # 从消息队列中获取事件并对事件进行处理 for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() exit(0) # 重绘背景 screen.fill((255,255,255)) # 画方块 a = pygame.draw.rect(screen, (255,0,0), (x, y, width, height)) print(a) # print(a.x, a.y) if a.x + a.size[0] < 100 and a.y == 0: # 方块右移 x += 1 # y += 1 elif a.y + a.size[1] < 100 and a.x + a.size[0] == 100: # 方块下移 y += 1 elif a.y + a.size[1] == 100 and a.x > 0: # 方块左移 x -= 1 elif a.y > 0 and a.x == 0: y -= 1 pygame.display.update() # clock. def main(): # 初始化导入的pygame中的模块 pygame.init() rungame() if __name__ == "__main__": main()


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3