Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python之pygame让图形动起来(4)

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

作者头像
萌海无涯
发布于 2019-08-14 08:10:40
发布于 2019-08-14 08:10:40
4.1K00
代码可运行
举报
文章被收录于专栏:萌海无涯萌海无涯
运行总次数:0
代码可运行

pygame移动图形

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

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

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

水平是X轴,

垂直是Y轴,

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

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

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

我们想象中的效果:

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

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

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

怎么解决这个问题呢?

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

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

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

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


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

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

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

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

定义刷新的帧率:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 定义频率clock = pygame.time.Clock()

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 设定刷新帧率clock.tick(60) # 越大刷新的越快

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

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

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

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

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

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

全部代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
完结撒花,copilot——细节决定成败!
今年五月的时候我写了一篇文章《**花了大半个月,我终于逆向分析了Github Copilot**》,受到了不少关注。当时应该还是copilot刚出不久,通过AST将webpack_modules的chunk自动拆分到不同的module文件,并通过一些语法转换让代码更易读。
孟健
2023/11/16
7020
完结撒花,copilot——细节决定成败!
copilot源码详细分析(三)ghostText核心逻辑
代码补全逻辑入口在calculateInlineCompletions 这个函数中:
孟健
2023/11/16
4890
copilot源码详细分析(三)ghostText核心逻辑
学习 koa 源码的整体架构,浅析koa洋葱模型原理和co原理
感兴趣的读者可以点击阅读。 其他源码计划中的有:express、vue-rotuer、redux、 react-redux 等源码,不知何时能写完(哭泣),欢迎持续关注我(若川)。
若川
2020/03/19
1.1K0
前端手写面试题,看这一篇就够了
题目描述:有一组版本号如下 ['0.1.1', '2.3.3', '0.302.1', '4.2', '4.3.5', '4.3.4.5']。现在需要对其进行排序,排序的结果为 ['4.3.5','4.3.4.5','2.3.3','0.302.1','0.1.1']
helloworld1024
2022/11/14
3320
Go Redis 中间件
本文基于 redis v6 中 WrapProcess 方法,可以对 redis 前后做操作。
王小明_HIT
2022/06/14
4500
VS Code 整活:100行代码写一个悬浮翻译插件
要说哪个插件对效率提升最大,可能各有推荐,各有千秋。但我要说对初学者,以及英文有亿点点差的同学来讲:翻译,是日常开发中必不可少的一环。在下找过N个VSCode 翻译插件 发现一个神器:
前端劝退师
2022/04/07
1.8K0
VS Code 整活:100行代码写一个悬浮翻译插件
深入koa2源码
koa是当下非常流行的node框架,相比笨重的express,koa只专注于中间件模型的建立,以及请求和响应控制权的转移。本文将以koa2为例,深入源码分析框架的实现细节。 koa2的源码位于lib目录,结构非常简单和清晰,只有四个文件,如下:
全栈程序员站长
2021/06/22
5650
copilot源码详细分析(一)从package.json说起
我们接下来重点分析一下walkthroughs、commands、keybindings、menus、configuration这五个字段。
孟健
2023/11/16
6210
copilot源码详细分析(一)从package.json说起
源码共读-Koa
Koa是基于 Node.js 平台的下一代 web 开发框架,它的源码可以看这里,本章通过源码来简绍一下Koa是怎么实现的。
kai666666
2024/07/11
1080
源码共读-Koa
[vue源码][nextTick]原理以及源码解析
nextTick Vue中的 nextTick涉及到Vue中DOM的异步更新,感觉很有意思,特意了解了一下。其中关于 nextTick的源码涉及到不少知识, nextTick 是 Vue 的一个核心实现,在介绍 Vue 的 nextTick 之前,为了方便大家理解,我先简单介绍一下 JS 的运行机制。
前端迷
2019/08/15
9210
实用的VUE系列——每天在用的Vue-SFC-Playground你真的了解吗?
声明:本文为稀土掘金技术社区首发签约文章,30天内禁止转载,30天后未获授权禁止转载,侵权必究!
用户7413032
2024/03/23
1.9K0
实用的VUE系列——每天在用的Vue-SFC-Playground你真的了解吗?
我逆向了GitHub Copilot,这是代码实现
众所周知,Github Copilot 是一种基于机器学习的代码自动补全工具。它使用了来自 GitHub 的大量代码作为训练数据,并使用 OpenAI 的语言模型来生成代码。Copilot 还可以学习用户的编码习惯,并根据上下文推断出正确的代码片段。在实际使用中发现大部份提示还是非常好用的,能够较为准确的推测出用户意图,甚至是基于项目其他文件的上下文进行推理。比较好奇这里是怎么做到的,于是探索了这个 VSCode 插件的详细实现。
腾讯云开发者
2023/11/03
2.8K0
我逆向了GitHub Copilot,这是代码实现
高级前端二面手写面试题(边面边更)1
(3)让函数的 this 指向这个对象,执行构造函数的代码(为这个新对象添加属性)
helloworld1024
2023/01/02
5170
Vue常见面试题
虚拟 DOM (Virtual DOM )这个概念相信大家都不陌生,从 React 到 Vue ,虚拟 DOM 为这两个框架都带来了跨平台的能力(React-Native 和 Weex)
隔壁老陈
2023/03/09
2K0
Vue常见面试题
【koa快速入门】之深究原理
前两节我们已经介绍了koa的基本使用和koa项目的最佳实践,今天我们来深究下koa2的原理。
luciozhang
2023/04/22
3120
【koa快速入门】之深究原理
koa源码阅读[1]-koa与koa-compose
接上次挖的坑,对koa2.x相关的源码进行分析 第一篇。 不得不说,koa是一个很轻量、很优雅的http框架,尤其是在2.x以后移除了co的引入,使其代码变得更为清晰。
贾顺名
2019/12/09
7280
从源码分析express/koa/redux/axios等中间件的实现方式
在前端比较熟悉的框架如express、koa、redux和axios中,都提供了中间件或拦截器的功能,本文将从源码出发,分析这几个框架中对应中间件的实现原理。
周陆军博客
2023/05/14
2K0
造一轮子:vscode插件--支持json生成go struct,curl生成go代码
最近学习了一下如何写vscode插件,不得不感叹大神写的vscode框架就是厉害,简单通过配置文件加上事件处理代码就可以扩展编辑器前端的能力。膜拜之余,造了一个轮子,交互过程如下,右键json文件选择“json生成go结构体(JsonToGo)”就可以生成json文件对应的golang struct;选择“生成golang代码或者结构体->curl生成go代码(CurlToGo)”就可以从curl命令(从浏览器的debug tool直接copy过来)生成对应的golang客户端代码,简单修改即可发起http请求。
golangLeetcode
2023/03/01
1.4K0
造一轮子:vscode插件--支持json生成go struct,curl生成go代码
VSC Extension Development-Create A Code Formatter Extension
Nothing to say here, check Official Guide
szhshp
2022/09/21
4460
写一个VSCode扩展
自从使用过 VSCode 后就再也离不开 VSCode,其轻量的代码编辑器与诸多插件让多数开发者爱不释手。同样我也不例外,一年前的我甚至还特意买本《Visual Studio Code 权威指南》的书籍,来更进一步了解与使用。
愧怍
2022/12/27
2.9K0
写一个VSCode扩展
相关推荐
完结撒花,copilot——细节决定成败!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验