电子游戏的核心原理

简介: 你小时候有没有玩过这样一种玩具:一块硬纸,一面画着一只鸟,一面画着一个笼子。硬纸下粘上一根细棒。用手来回转动细棒,让硬纸的两面快速交替出现,就会看见鸟被关在了笼子里。

零基础python入门教程:python666.cn

大家好,欢迎来到 Crossin的编程教室 !

你小时候有没有玩过这样一种玩具:一块硬纸,一面画着一只鸟,一面画着一个笼子。硬纸下粘上一根细棒。用手来回转动细棒,让硬纸的两面快速交替出现,就会看见鸟被关在了笼子里。

这种现象被称为视觉暂留,又称余晖效应。人眼的性质使得光信号在进入之后,会保持一小段时间,这段时间大约是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游戏需要在一次循环内做很多事情,需要进行复杂的物理运算、计算光线的照射效果、处理大量电脑角色的智能、网络信息通讯等。在配置不高的电脑上,这些计算花费的时间就多,游戏刷新画面的频率就变慢了。这也就是我们常听说“一个游戏的帧率低”的原因,这种时候你就会感到游戏不流畅。

以上就是对于电子游戏核心原理的简单介绍。如果你是个对游戏开发感兴趣的新手,可以看看我之前写过的 pygame 系列教程:

Pygame 入门 - 仿微信打飞机游戏

虽然不像现在流行的游戏引擎那么“傻瓜化”操作,但是通过代码实现游戏可以让你对游戏的底层逻辑有更深刻的理解。

感谢转发点赞的各位~

相关文章
|
9月前
|
缓存 Java 数据库
Spring框架(一) 底层核心原理解析
这个才是我们想要看的结果 ,我们可以简单分析一下 , userServiceBase的test1()方法也是有事务存在的 , 同时userServiceBase也是一个Bean , 它最终也会产生一个代理对象去当做一个Bean , 碎玉UserService而言 , 我要给userServiceBase这个属性去赋值 , 那么他肯定要从Spring容器中找到一个userServiceBase的一个Bean来赋值 , 所以他找到的就是Spring事务所产生的userServiceBase的代理对象 , 所以这个注解就是有用的
127 0
|
13天前
|
XML 监控 Java
Spring框架的核心原理与应用实践
Spring框架的核心原理与应用实践
|
2月前
|
开发框架 安全 .NET
C#的核心知识总结
【5月更文挑战第17天】C#是面向对象的编程语言,用于Windows、Web及跨平台应用开发。关键概念包括:基础语法(变量、控制语句、函数)、类与对象(封装、继承、多态)、接口和委托(抽象类型与类型安全的方法引用)、LINQ查询(集成查询语言)以及异步编程(async/await、Task)。此外,还有泛型、反射和特性等进阶主题。
33 1
|
2月前
|
消息中间件 并行计算 Go
skynet设计原理
skynet设计原理
|
8月前
|
XML 开发框架 安全
C#学习核心知识总结
C#学习核心知识总结
37 1
|
存储 资源调度 Kubernetes
K8S | 核心应用原理分析
K8S作为开源的容器编排引擎,用来对容器化应用进行自动化部署、 扩缩和管理;
142 0
K8S | 核心应用原理分析
|
安全 前端开发 Java
深入分析GadgetInspector核心代码(一)
深入分析GadgetInspector核心代码
219 1
深入分析GadgetInspector核心代码(一)
|
存储 运维 Kubernetes
【K8S 核心架构原理】
K8S 是属于主从设备模型(Master-Slave 架构),即有 Master 节点负责核心的调度、管理和运维,Slave 节点则执行用户的程序。
187 0
|
SQL 监控 NoSQL
技术组件优化分析:原理、方法与实战分享
对一个固定的技术组件的分析优化思路,即组件不是我们开发的,但又要分析优化它,怎么办? 当数据库的CPU并没有全部用完,而是只用了几颗的时候,如何具体定向?将用到查看数据库本身线程栈的方法,这和前面直接看trx表有所不同。
102 0
|
缓存 安全 Java
深入分析GadgetInspector核心代码(三)
深入分析GadgetInspector核心代码
148 0
深入分析GadgetInspector核心代码(三)