从0开始学游戏开发
蔡能
原网易游戏引擎架构师,资深游戏底层技术专家
立即订阅
5801 人已学习
课程目录
已完结 41 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 跟我学,你也可以开发一款游戏!
免费
第一章:游戏开发基础知识 (5讲)
第1讲 | 游戏开发需要了解哪些背景知识?
第2讲 | 2D游戏和3D游戏有什么区别?
第3讲 | 游戏的发动机:游戏引擎
第4讲 | 底层绘图接口的妙用
第5讲 | 构建游戏场景的武器:地图编辑器
第二章:客户端开发 (10讲)
第6讲 | 从0开始整理开发流程
第7讲 | 如何建立一个Windows窗体?
第8讲 | 如何区分图形和图像?
第9讲 | 如何绘制游戏背景?
第11讲 | 如何载入“飞机”和“敌人”?
第12讲 | 如何设置图像的前后遮挡?
第14讲 | 如何设置精灵的变形、放大和缩小?
第15讲 | 如何设置淡入淡出和碰撞检测?
第17讲 | 如何制作游戏资源包和保存机制?
第18讲 | 如何载入背景音乐和音效?
第三章:UI和键盘鼠标 (3讲)
第20讲 | 如何在游戏中载入UI和菜单?
第21讲 | 如何用鼠标和键盘来操作游戏?
第23讲 | 如何判断客户端的网络连接?
第四章:脚本语言 (3讲)
第24讲 | 如何嵌入脚本语言?
第26讲 | 脚本语言在游戏开发中有哪些应用?
第27讲 | 如何使用脚本语言编写周边工具?
第五章:服务器端开发 (6讲)
第29讲 | 如何选择合适的开发语言?
第30讲 | 如何定制合适的开发协议?
第32讲 | 不可忽视的多线程及并发问题
第33讲 | 如何判断心跳包是否离线?
第35讲 | 如何用网关服务器进行负载均衡?
第36讲 | 如何制作游戏内容保存和缓存处理?
第六章:热点剖析 (9讲)
第10讲 | 热点剖析(一):HTML5技术是如何取代Flash的?
第13讲 | 热点剖析(二):如何选择一款HTML5引擎?
第16讲 | 热点剖析(三):试试看,你也可以编写一款HTML5小游戏!
第19讲 | 热点剖析(四):安卓端和苹果端游戏开发有什么区别?
第22讲 | 热点剖析(五):如何选择移动端的游戏引擎?
第25讲 | 热点剖析(六):AR和人工智能在游戏领域有哪些应用?
第28讲 | 热点剖析(七):谈谈微信小游戏的成功点
第31讲 | 热点剖析(八):谈谈移动游戏的未来发展
第34讲 | 热点剖析(九):谈谈独立开发者的未来发展
加餐 (3讲)
复习课 | 带你梳理客户端开发的三个重点
课后阅读 | 游戏开发工程师学习路径(上)
课后阅读 | 游戏开发工程师学习路径(下)
结束语 (1讲)
结束语 | 做游戏的过程就像是在雕琢一件艺术品
从0开始学游戏开发
登录|注册

第8讲 | 如何区分图形和图像?

蔡能 2018-06-12
据我所知,很多人可能都分不清图形和图像这两个概念:一种情况是你可能会觉得区分图形和图像这两个概念并没有什么实质的用途,于是就没关心过;另一种情况是,你可能朦胧中对图形和图像的区别有一些了解,但是不够深入或者不够透彻,也说不出一个所以然。没关系,今天我就来深入浅出地给你讲一下,图形和图像背后的那些事儿。
既然我们是做游戏开发,那首先我们得知道,从专业地角度讲,区分图形和图像对我们的开发工作有什么帮助。简单地说,搞清楚了游戏开发中绘制、载入、保存的究竟是图形还是图像,你会对接口函数的使用有一个更深入的认识。
比如,如果是图形接口,可能它的接口函数是:
Surface* DrawSomething(int start_x, int start_y, int finish_x, int finish_y);
如果是图像接口,它的接口函数函数看起来可能是这个样子:
Surface* LoadFromFile(const string& filename);

如何区分图形和图像?

从广义上说,所有我们人肉眼能看到的对象,都是图形。从狭义上说,图形是我们所看到的一种点、线、面的描述对象。
图像,是由数据组成的任意像素点的描述对象。比如我们所看到的照片。在电脑中,图形的显示过程是有一定顺序(比如从左往右)的,而图像则是按照像素点进行显示的。电脑对于图形的编辑、修改更为简单方便,因为单一的图形具有特殊的属性(比如圆圈的直径、颜色等等,因为这些在这个图形建立的时候就固定了下来)。
对于图像进行编辑则非常困难,软件需要用一些特殊的算法来计算图像的色块、区域、描边等等,来安排图像该如何进行编辑,有一些甚至还需要用到深度学习的方法来辨别图像的显示区域、显示的内容等等,所以图像的修改比之图形的修改要困难。
那么你可能就会问了,既然前面说,任何眼睛看到的对象,都是图形,那么我觉得图形也是一种图像,这么说对不对呢?如果按照载体来说,图形也是一种图像,这种说法是对的。因为一张 JPG 图片可能存储的是一幅照片,也可能存储一幅三角形的图形。虽然本质不一样,但是由于存储的形式是以图像的形式存储的,在电脑看来,这个三角形就是一幅图像。但是如果你在游戏中使用函数画出了一个三角形,那就是图形了。
所以,严格来说,图形其实是图像的一种抽象表现形式。一般来讲,图形的轮廓并不复杂,比如一个圆圈、一个方块、一个三角形、一条线、某些几何图形、工程上面使用的图纸和 CAD 等,这些都属于图形。图形的色彩也并不是很丰富。而图像一般都有复杂的轮廓、非常多的细节和颜色(当然也有纯单一的颜色,比如黑白照片)。
所以,准确地说,图形和图像有不同的模式。当然,从计算机最底层的程序(显卡处理)来看,绘制图形和图像所经过的硬件处理几乎是一样的。一般显卡会经过这些流程进行图形、图像计算(2D)、显存,用来存取图形图像内容,GPU 计算图像图像内容并渲染,最后输出到显示器。
图像的呈现方式讲,只有通过图像的方式去呈现“图形”这个对象,才能看到图形,而在开发游戏的过程中,图形和图像的编程方式是截然不同的。比如我们要画线,那么可能会使用到一个叫 DrawLine 的函数。该函数里面需要输入线条的起始坐标,这就是图形的绘制方式。而在接下来的过程中,我将教你如何绘制图形和图像,并呈现出来。

跟我一起绘制图形和图形

现在,我们先用 Pygame 游戏库来建立一个窗体,然后开始绘制图形、载入图像。
在第五节的时候,我们已经讲过 Pygame 的安装和配置。在第六节的时候,我们讲过如何建立一个 Windows 窗体。现在从上到下,我们一起看一下这段代码。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《从0开始学游戏开发》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(5)

  • 茂陵刘郎秋风客
    不知道是排版问题还是什么?画图那一块代码照着敲出来无法实现,把画图代码放到while 循环里就可以运行了
    2018-06-12
    5
  • 王鲜申
    可以在每次画图之前加一个 for 循环,然后用一个变量控制图形的位置,用 for 循环中的终止条件控制移动速度
    2018-12-01
  • 奇小易
    试了一下画圆从左到右,就是调整圆的横坐标,但是直接运行就跑得太快了。而就想使用time.sleep函数加降低刷新频率,结果是屏幕黑的,显示未响应。
    2018-07-13
  • 以往
    不同的情景下,游戏人物的动作缓急都各有不同。一般是倾向于改变帧速,还是在同一帧速下使用调整了动作幅度的图片来达到效果?

    作者回复: 调整幅度也是一种方案,多线程里绘制需要的内容,然后改变帧率也是一种方案

    2018-06-12
  • 呵呵
    后面的课程准备用pygame开发客户端,c++开发server?

    作者回复: 会带一部分c,python也有

    2018-06-12
收起评论
5
返回
顶部