当前位置:网站首页>The core principles of electronic games
The core principles of electronic games
2022-07-29 13:55:00 【big datav】

导读:The underlying logic of game development.
作者:Crossin先生
来源:Crossin的编程教室(ID:crossincode)
你小时候有没有玩过这样一种玩具:一块硬纸,一面画着一只鸟,一面画着一个笼子.硬纸下粘上一根细棒.用手来回转动细棒,让硬纸的两面快速交替出现,就会看见鸟被关在了笼子里.

这种现象被称为视觉暂留,又称余晖效应.人眼的性质使得光信号在进入之后,会保持一小段时间,这段时间大约是0.1~0.4秒.电影、动画便是利用这种现象得以实现,把一幅幅静态画面快速连续播放,形成看上去连续的活动画面.游戏也不例外.
来看一段用 Python 里的知名游戏库 pygame(需安装)写的一个“空游戏”代码:

这段代码虽然只显示了一张背景图片,完全没有任何游戏功能,但这已经是一个最基本的游戏代码框架了.
注意代码中一个 while True 的循环,注释为“游戏主循环”.这就是游戏的主体部分.每次循环都相当于是一张静态的画面,程序一直运行,只需要去修改这张画面,就有了动态的效果.
与动画不同,游戏中不仅要把一幅幅画面播放出来,还需要处理玩家的操作与游戏中内容的交互.所以在这个 while 循环中,还要去接收玩家的输入,以及处理游戏中的各种逻辑判断、运动、碰撞等等.
在以上代码的主循环里,做了对退出事件的响应:
for event in pygame.event.get():
if event.type == pygame.QUIT:
#接收到退出事件后退出程序
pygame.quit()
exit()然后把图像绘制到窗口中:
screen.blit(background, (0,0)最后,把整个窗口画面更新:
pygame.display.update()如果你看过“黏土动画”,那么就可以把整个游戏过程想象成拍摄黏土动画的过程:
每一次,screen.blit() 相当于去把人偶、布景移动一点点位置
pygame.display.update() 则是按下快门拍下一帧新的画面
而 if event.type == pygame.QUIT: 就是在判断,导演是不是喊停收工了
这一切都由计算机在很短的时间内处理,以至于玩家感觉是连贯的.
尽管这是非常简单的游戏逻辑,但在核心原理上,绝大多数的游戏都是相通的.即便是酷炫的3D游戏或者大型网游,它们同样是通过一个游戏主循环,在循环中更新各种游戏逻辑和显示效果来运作的.
有些大型3D游戏需要在一次循环内做很多事情,需要进行复杂的物理运算、计算光线的照射效果、处理大量电脑角色的智能、网络信息通讯等.在配置不高的电脑上,这些计算花费的时间就多,游戏刷新画面的频率就变慢了.这也就是我们常听说“一个游戏的帧率低”的原因,这种时候你就会感到游戏不流畅.
以上就是对于电子游戏核心原理的简单介绍.感谢转发和点赞的各位~

延伸阅读

《利用Python进行数据分析(原书第2版)》
干货直达
更多精彩
在公众号对话框输入以下关键词
查看更多优质内容!
读书 | 书单 | 干货 | 讲明白 | 神操作 | 手把手
大数据 | 云计算 | 数据库 | Python | 爬虫 | 可视化
AI | 人工智能 | 机器学习 | 深度学习 | NLP
5G | 中台 | 用户画像 | 数学 | 算法 | 数字孪生
据统计,99%的大咖都关注了这个公众号
边栏推荐
- IDEA2021.2安装与配置(持续更新)
- 【MySQL】ERROR 2002 (HY000): Can‘t connect to local MySQL server through socket ‘/tmp/mysql.sock‘
- 何享健“A拆A”又败一局,美的旗下美智光电终止创业板IPO
- 如何监控海外服务器性能
- SIP系统组成格式
- 网页被劫持跳转怎么办?发布网修复方法
- 开关电源-半桥LLC控制
- MySQL基础篇(四)-- 数据表的基本操作
- IJCAI 2022 outstanding papers published, China won two draft in 298 the first author
- HMS Core音频编辑服务音源分离与空间音频渲染,助力快速进入3D音频的世界
猜你喜欢
随机推荐
Dataset:Medical Data and Hospital Readmissions医疗数据和医院再入院情况数据集的简介、下载、使用方法之详细攻略
Py之eli5:eli5库的简介、安装、使用方法之详细攻略
第二十一周作业
如何使用MISRA改进嵌入式编程
IJCAI 2022 outstanding papers published, China won two draft in 298 the first author
深度解析C语言文件操作以及常见问题
app小程序开发的营销优势有什么?
如何监控海外服务器性能
AutoAlignV2:多模态3D目标检测新SOTA!(ECCV2022)
Navicat如何连接MySQL
R Error in :missing values are not allowed in subscripted assignments of data frames
推荐几款2022年好用的设备管理系统(软件)
JS_ deleting the invalid data in the array undefined '0' null false NaN
JS_删除数组里的无效数据 0 undefined ‘‘ null false NaN
What is the difference between the legendary server GOM engine and the GEE engine?
如何把Netflix数据集转换成Movielens格式?
抓住这几个关键点,做薪酬数据分析并不难
kotlin协程与线程池
Legendary version adds npc modification, adds npc method and configuration parameter tutorial
网页被劫持跳转怎么办?发布网修复方法








