从0开始学游戏开发
蔡能
原网易游戏引擎架构师,资深游戏底层技术专家
立即订阅
5823 人已学习
课程目录
已完结 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开始学游戏开发
登录|注册

第9讲 | 如何绘制游戏背景?

蔡能 2018-06-14
我在之前的文章中描述了各种基础知识,然后梳理了开发流程,并带你创建了一个窗体,现在我们要做的就是朝这个窗体里添加东西。
我会随着进度逐渐提升难度。就现阶段来讲,我们涉及的只是一些基础知识,并且只需要将大部分的关注点放在我们要做的游戏内容上,并不需要关注过多的底层逻辑代码
做事情都有先后顺序,做游戏开发自然也是。为什么要学习先绘制游戏背景而不是别的什么,很简单,因为只有先绘制了游戏背景,才能进行后续的游戏图像遮挡、图形图像的显示等等操作。
不管你有没有玩过《超级玛丽》《魂斗罗》《雷电》之类的游戏,但一定对其画面不陌生。和我们要开始做的打飞机游戏一样,这种类型的 2D 游戏,其背景不是左右卷轴,就是上下卷轴。所谓左右卷轴,就是游戏画面是横向的、左右运动的,而上下卷轴就是游戏画面是竖直对的、上下运动的。
像《雷电》这样的经典飞机游戏,就是属于上下卷轴的。上下卷轴的飞机游戏有一个特点,就是它是在空中,从凌驾于飞机之上的视角,往地面俯瞰的。因为是俯视角,所以我们可以很方便地看到游戏的整体地图,包括地面上的敌人、空中的敌人等等,层次感会很强。
因此,可以确定,我们要做的打飞机,也是一个上下卷轴的游戏。这样,我们就可以着手将需要的图片添加进去了。
我们要使用 Pygame,先读取一个图片,让该图片成为游戏背景并载入进去。当下阶段,我们的图片从哪儿获得并不重要,因为在一个完整的游戏开发团队里面,都有专业的美术团队负责作图,但是现在我们没有,所以我就自己贴一幅图来代替正式的游戏背景。所以你现在只需要知道背景是如何贴上去的就好了。
和前面的文章说过的一样,我们需要先载入 Pygame 模块,并且定义一个变量 background。我们将一幅名为 lake,jpg 的图片文件赋值给 backgroud 变量。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《从0开始学游戏开发》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(11)

  • 裴海港
    在填充颜色的时候分别为RGB设置0-255的随机数字应该可以让颜色不停变换
    2018-06-14
    2
  • 观察与思考
    我觉得从逻辑顺序上,如果按15324,比较好理解
    2018-06-14
    2
  • 阿森
    先screen.blit(bg, (0,0))
    update(),再while true,图像就出来了,按原文的顺序是黑屏的窗口,编程小白查错好困难啊
    2018-07-13
    1
  • 00000000
    15324的话第一个5不是浪费吗
    2018-07-06
    1
  • fenglinwan
    老师,我有一个问题,如果我的一台电脑运行速度快,一个循环很快就运行完了,另一台电脑慢!

    岂不是一台背景滑动的快,另一台背景滑动的慢!

    作者回复: 所以要有帧速度控制。

    2018-06-19
    1
  • 青鸟
    独立开发游戏如何获取图片等资源,一定要自己学会画图吗?

    作者回复: 去网上搜,如果是程序员不需要学会画图

    2018-06-14
    1
  • 三硝基甲苯
    while True:

        for event in pygame.event.get():

            if event.type == pygame.QUIT:

                pygame.quit()

        screen.blit(bg, (0, y_move))

        y_move -= 1

        pygame.display.update()

        screen.fill([random.randint(0,255),random.randint(0,255),random.randint(0,255)])

        pygame.time.wait(100)

    可能会被 颜色变化闪瞎

    作者回复: 你可以做判断,变化的不要这么剧烈

    2018-06-14
    1
  • GS
    这样分段的代码。对于初学者,忘记缩进搞半天,最好是最后有个完整版的
    2018-10-18
  • 邢浩锋
    你好,按着原文的代码写,只是背景图片不同。最后运行出来的背景是一片漆黑,看不到图片。是跟背景图片的大小有关吗?还是什么原因?

    作者回复: 你看下绘制函数的调用顺序

    2018-06-19
  • Geek_King@技术爱好者
    为什么if event.type==pygame.QUIT:之后用pygame.quit()而不用sys.exit(),因为我运行的时候好像pygame.quit()以后还会执行后面的代码,出错才退出的

    作者回复: 执行后面的代码是因为循环外面还有代码,sys.exit是直接退出,虽然结果都是退出,但这种方式比较粗暴。

    2018-06-15
  • null
    为什么update要在fill之前调用呢?我的理解是,如果先调用update把要显示的东西都显示出来了,但是后面又调用了fill,这样不是就把前面显示的东西都覆盖掉了吗?不是先清屏再显示的吗(就是先调用fill再调用update)?

    作者回复: 看文中具体代码,如果fill后,update就覆盖了清除操作

    2018-06-14
收起评论
11
返回
顶部