前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python之pygame让图形动起来(4)

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

作者头像
萌海无涯
发布2019-08-14 16:10:40
3.9K0
发布2019-08-14 16:10:40
举报
文章被收录于专栏:萌海无涯萌海无涯

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()
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 萌海无涯 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档