持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第18天,点击查看活动详情
创建视觉对象
电脑游戏本质上是非常直观的,游戏开发人员花费大量时间来操作图形和完善视觉效果,为玩家创造最有趣的体验。本章为生成计算机游戏的视觉对象奠定了坚实的基础。
在本章中,我们将使用用Python编写的示例,并使用Pygame模块来说明我们的观点。您不需要完全了解这些程序,但我们鼓励您尝试!
使用像素功率
如果您仔细观察计算机屏幕,您应该能够看出它由彩色点的行和列组成。这些点紧密地排列在一起,当您以舒适的距离查看屏幕时,它们会合并形成单个图像。显示器中的单个点称为图片元素或像素。由于计算机游戏本质上主要是视觉游戏,因此像素在很大程度上是游戏程序员的交易工具。
让我们编写一个小的Python脚本来生成包含每种可能颜色的图像。清单 4-1 使用 Pygame 创建一个具有每个可能的颜色值的大图像。该脚本需要几分钟才能运行,但完成后,它将保存一个名为 allcolors.bmp的图像文件,您可以在图像查看器或 Web 浏览器中打开该文件。不要担心清单4-1的细节;我们将在本章中介绍不熟悉的代码。清单 4-1.生成包含每种颜色的图像
清单 4-1 对于 Pygame 脚本来说是不寻常的,因为它不是交互式的。当它运行时,您将看到它从 1 计数到 256,然后在将位图文件保存在与脚本相同的位置后退出。不要担心,一次一个像素地缓慢生成位图是你在游戏中永远不需要做的事情!
使用颜色
您可能熟悉如何使用颜料创建颜色。如果你有一盆蓝色油漆和一锅黄色油漆,那么你可以通过将两者混合在一起来创造绿色的阴影。事实上,您可以通过以各种比例混合原色红色,黄色和蓝色来生产任何颜色的油漆。计算机颜色的工作方式类似,但“原色”为红色、绿色和蓝色。要了解差异,我们需要涵盖颜色背后的科学 - 不用担心,这并不复杂。
要看到一种颜色,来自太阳或灯泡的光必须从某些东西上反弹并穿过眼睛的晶状体。来自灯泡的阳光或人造光可能看起来是白色的,但它实际上包含了彩虹混合在一起的所有颜色。当光线照射到表面时,其中的一些颜色被吸收,其余的被反射。正是这种反射光进入你的眼睛,并被感知为颜色。以这种方式创建颜色时,称为颜色减法。计算机屏幕的工作方式不同。它们不是反射光,而是通过添加红光、绿光和蓝光(此过程称为颜色添加)来生成自己的颜色并创建颜色。
就目前而言,这已经足够科学了。现在,我们需要知道如何在Python程序中表示颜色,因为为所有1670万个它们命名是不切实际的!
在pygame 中表示颜色
当 Pygame 需要一种颜色时,您可以将其作为三个整数的元组传入,每个整数按红色、绿色和蓝色顺序对应一个颜色分量。每个分量的值应在 0 到 255 的范围内,其中 255 表示全强度,0 表示分量对最终颜色没有任何影响。表 4-1 列出了通过使用设置为关闭强度或全强度的组件可以创建的颜色。
一些早期的计算机仅限于这些华丽的颜色;幸运的是,现在你可以创造出更微妙的色调!
非常值得尝试不同的值,以便您对计算机生成的颜色有直观的感觉。通过一些练习,您应该会发现您可以查看三个颜色值,并对颜色的外观进行有根据的猜测。让我们编写一个脚本来帮助我们做到这一点。运行清单 4-2 时,您将看到一个屏幕分成两半。屏幕顶部有三个刻度(每个比例代表红色、绿色和蓝色分量一个),还有一个圆圈表示当前选定的值。如果单击其中一个刻度上的任意位置,它将修改组件并更改生成的颜色,该颜色显示在屏幕的下半部分。
尝试将滑块调整为(96,130,51),这给出了令人信服的僵尸绿色阴影,或者(221,99,20)以获得令人愉悦的火球橙色。
清单 4-2 介绍了 pygame.draw 模块,该模块用于在屏幕上绘制线条、矩形、圆形和其他形状。我们将在本章后面更详细地介绍本模块。
一旦你有了一种颜色,你可能想对它做很多事情。假设我们在太空游戏中有一名士兵不幸在没有雨伞的情况下被困在流星雨中。当流星穿过大气层时,我们可以用“火球橙色”来表示流星,但是当它们撞击地面时,它们会逐渐变黑。我们如何找到较深的颜色?