从 0 开始学游戏开发
蔡能
原网易游戏引擎架构师,资深游戏底层技术专家
37243 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 42 讲
从 0 开始学游戏开发
15
15
1.0x
00:00/00:00
登录|注册

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

fill屏幕的变幻颜色
update函数的作用
每一帧的重要性
填充屏幕
更新屏幕
循环移动背景
更新屏幕
显示背景图片
初始化窗体
载入背景图片
使用Pygame
上下卷轴
左右卷轴
小结
移动背景
绘制游戏背景
2D游戏背景类型
先绘制游戏背景的重要性
添加游戏内容
创建窗体
开发流程
基础知识
游戏背景绘制

该思维导图由 AI 生成,仅供参考

我在之前的文章中描述了各种基础知识,然后梳理了开发流程,并带你创建了一个窗体,现在我们要做的就是朝这个窗体里添加东西。
我会随着进度逐渐提升难度。就现阶段来讲,我们涉及的只是一些基础知识,并且只需要将大部分的关注点放在我们要做的游戏内容上,并不需要关注过多的底层逻辑代码
做事情都有先后顺序,做游戏开发自然也是。为什么要学习先绘制游戏背景而不是别的什么,很简单,因为只有先绘制了游戏背景,才能进行后续的游戏图像遮挡、图形图像的显示等等操作。
不管你有没有玩过《超级玛丽》《魂斗罗》《雷电》之类的游戏,但一定对其画面不陌生。和我们要开始做的打飞机游戏一样,这种类型的 2D 游戏,其背景不是左右卷轴,就是上下卷轴。所谓左右卷轴,就是游戏画面是横向的、左右运动的,而上下卷轴就是游戏画面是竖直对的、上下运动的。
像《雷电》这样的经典飞机游戏,就是属于上下卷轴的。上下卷轴的飞机游戏有一个特点,就是它是在空中,从凌驾于飞机之上的视角,往地面俯瞰的。因为是俯视角,所以我们可以很方便地看到游戏的整体地图,包括地面上的敌人、空中的敌人等等,层次感会很强。
因此,可以确定,我们要做的打飞机,也是一个上下卷轴的游戏。这样,我们就可以着手将需要的图片添加进去了。
我们要使用 Pygame,先读取一个图片,让该图片成为游戏背景并载入进去。当下阶段,我们的图片从哪儿获得并不重要,因为在一个完整的游戏开发团队里面,都有专业的美术团队负责作图,但是现在我们没有,所以我就自己贴一幅图来代替正式的游戏背景。所以你现在只需要知道背景是如何贴上去的就好了。
和前面的文章说过的一样,我们需要先载入 Pygame 模块,并且定义一个变量 background。我们将一幅名为 lake,jpg 的图片文件赋值给 backgroud 变量。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文详细介绍了使用Pygame绘制游戏背景的基本流程,旨在帮助读者快速入门游戏背景绘制的方法。作者首先强调了游戏背景绘制的重要性,并针对上下卷轴游戏的特点进行了阐述。随后,文章详细讲解了使用Pygame载入背景图片、初始化窗体、绘制背景、处理退出事件以及更新屏幕的操作步骤。特别值得注意的是,在实现背景移动时,作者提出了填充黑色以清除移动后的图像,以解决图像拖尾问题的方法。通过这些步骤,读者可以快速了解如何使用Pygame绘制游戏背景,并理解背景移动时的处理方法。总的来说,本文以简洁清晰的语言,结合具体的代码示例,为读者提供了一份有益的技术指南。 文章中还提到了在写2D游戏时需要注意每一帧的更新,以及update功能的作用,强调了每一帧的重要性。此外,作者还留下了一个思考题,即在fill屏幕时如何让填充的颜色不停变幻,展示了对读者的互动性和挑战性。这些内容使得本文不仅仅是一篇技术指南,更是一次与读者共同思考和探讨的过程。通过本文,读者不仅可以学习到Pygame绘制游戏背景的基本流程,还能够对游戏开发中的一些重要概念有更深入的理解。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《从 0 开始学游戏开发》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(13)

  • 最新
  • 精选
  • fenglinwan
    老师,我有一个问题,如果我的一台电脑运行速度快,一个循环很快就运行完了,另一台电脑慢! 岂不是一台背景滑动的快,另一台背景滑动的慢!

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

    2018-06-19
    6
  • 三硝基甲苯
    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
    2
  • 青鸟
    独立开发游戏如何获取图片等资源,一定要自己学会画图吗?

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

    2018-06-14
    1
  • 邢浩锋
    你好,按着原文的代码写,只是背景图片不同。最后运行出来的背景是一片漆黑,看不到图片。是跟背景图片的大小有关吗?还是什么原因?

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

    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
  • GS
    这样分段的代码。对于初学者,忘记缩进搞半天,最好是最后有个完整版的
    2018-10-18
    3
  • 裴海港
    在填充颜色的时候分别为RGB设置0-255的随机数字应该可以让颜色不停变换
    2018-06-14
    3
  • 观察与思考
    我觉得从逻辑顺序上,如果按15324,比较好理解
    2018-06-14
    3
  • 阿森
    先screen.blit(bg, (0,0)) update(),再while true,图像就出来了,按原文的顺序是黑屏的窗口,编程小白查错好困难啊
    2018-07-13
    1
收起评论
显示
设置
留言
13
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部