小言_互联网的博客

游戏开发如此简单?我直接创建了一个游戏场景【python 游戏实战 02】

353人阅读  评论(0)

前言

本系列文章将会以通俗易懂的对话方式进行教学,对话中将涵盖了新手在学习中的一般问题。此系列将会持续更新,包括别的语言以及实战都将使用对话的方式进行教学,基础编程语言教学适用于零基础小白,之后实战课程也将会逐步更新。

若有想学习的内容可以在评论区留言,根据大家的要求持续更新。点赞过十万就算化成灰我也更新下一篇。(肯定不到,也会更的。)

有问题也可以在评论区留言,也可以私聊我加我好友共同交流一起进步~

我的其它教程

教程点击进去将会有目录

《看聊天记录都学不会C语言?太菜了吧(1)我在大佬群里问基础问题没人理?——学习建议

《大学生C语言作业、习题100例白话详解》

目录

《看聊天记录都学不会Python到游戏实战?太菜了吧》游戏角色开始动起来了,真帅!【python 游戏实战 03】—— 角色移动

《看聊天记录都学不会Python到游戏实战?太菜了吧》这是我第一次使用代码创建出一个窗口【python 游戏实战 02】—— 创建游戏场景

《看聊天记录都学不会Python到游戏实战?太菜了吧》这是我第一次使用代码创建出一个窗口【python 游戏实战 01】—— 创建窗口

《看聊天记录都学不会Python到游戏实战?太菜了吧》(12)python 的列表我从没想过会那么好用—— 列表

《看聊天记录都学不会Python到游戏实战?太菜了吧》(11)python里面while到底有多少知识点—— break continue

《看聊天记录都学不会Python到游戏实战?太菜了吧》(10)无底洞的循环—— 循环初窥

《看聊天记录都学不会Python到游戏实战?太菜了吧》(9)集万家之长不死 python—— 导包

《看聊天记录都学不会Python到游戏实战?太菜了吧》(8)我们开始做一个数字小游戏吧—— 数字游戏开始做 导包

《看聊天记录都学不会Python到游戏实战?太菜了吧》(7)我用函数写了个特洛伊木马—— 自定义函数

《看聊天记录都学不会Python到游戏实战?太菜了吧》(6)不会这个知识点代码越写越难—— and or 逻辑运算

《看聊天记录都学不会Python到游戏实战?太菜了吧》(5)用前朝的剑斩今朝的官——if…else

《看聊天记录都学不会Python到游戏实战?太菜了吧》(4)小白不知道这个知识点将会错漏百出——if 与 层级

《看聊天记录都学不会Python到游戏实战?太菜了吧》(3)都说123是字符不是数字——输入与类型

《看聊天记录都学不会Python到游戏实战?太菜了吧》(2)在python中加号竟然如此善变——变量与运算

《看聊天记录都学不会Python到游戏实战?太菜了吧》(1)装载Python神器!亮剑!——helloworld


作者简介

作者名:1_bit

简介:CSDN博客专家,2020年博客之星TOP5,蓝桥签约作者。15-16年曾在网上直播,带领一批程序小白走上程序员之路。欢迎各位小白加我咨询我相关信息,迷茫的你会找到答案。

博客地址:https://i1bit.blog.csdn.net


🐰小C:小媛,上一节创建了一个黑框框开不开心?

👸小媛:开…不,不开心,才创建一个黑框框我能有啥开心的。

🐰小C:话不能这样说,毕竟你已经开始可以创建一个黑框框了。

👸小媛:不不不,不做完游戏我不开心。

🐰小C:行,那这一节就让你创建一个场景吧。

👸小媛:赶紧的,我觉得你是在想水字数才说那么多的话。

🐰小C:毕竟学习这种枯燥的技术要给大家营造一种轻松的氛围嘛。

👸小媛:赶紧吧,我等着了。

🐰小C:首先我们把上一节的等待给加一下。在游戏中,等待其实是有一个主循环,一直对游戏中发生的事情进行监听。

👸小媛:所以我们就是需要在下面价格循环哟?

🐰小C:是的,我们在下面添加一个 while 循环,这个 while 循环内一直对游戏的事件进行监听,这样我们就知道用户做了什么事情,例如用户按下了什么键。

👸小媛:明白,请继续。

🐰小C:我们在循环中需要一直获取游戏中发生的事件,这个时候可以使用一个一个方法 pygame.event.get()。pygame 中使用 event 属性调用 get 方法可以获取一个列表,这个列表的内容为这个游戏中所发生的事件集。我们通过一个 for 循环对这个列表进行遍历,此时根据当前列表已经遍历出来的元素做判断,若是用户点击了窗口的右上角叉叉进行退出,我们就给一个退出响应即可。

👸小媛:那怎么做呢?

🐰小C:你看下面的代码。

import pygame

pygame.init()
screen=pygame.display.set_mode((600,800))
pygame.display.set_caption("这是一个飞机游戏")
icon=pygame.image.load(r'E:\2dsrc\src\img\hero1.png')
pygame.display.set_icon(icon)
#游戏主循环
while True:
    #事件遍历
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            exit()

👸小媛:你意思是说主循环我们直接使用 True 作为条件就好了,然后在主循环内有一个 for 循环用来遍历 pygame 游戏中的事件?那 for 循环中的代码是什么意思呢?

🐰小C:里面其实就是用 if 判断已经遍历到的元素 event 的类型,也就是判断 type 属性是否等于 pygame 中的 QUIT 退出。pygame 中的 QUIT 就表示一个退出的意思,如果是这个事件点击到了有关退出的按钮,那么就执行 exit()。exit() 可退出整个程序。

👸小媛:唔,我懂了,我运行出来了。但是是一个黑屏幕我想加一个游戏场景怎么办?

🐰小C:很简单,我们使用 screen 对象调用 blit 方法 screen.blit()。在这个方法中第一个传入的是图片参数,第二个传入的是要从哪里开始绘制的坐标。

👸小媛: 那图片怎么获得呢?

🐰小C:直接使用 pygame.image.load() 就可以了,就跟你之前用来设置图片获取的图片一样,但是要注意,我们需要把图片绘制放到主循环中,因为为了保持有动画效果每一帧都需要进行绘制新的内容,就跟你那个画在书上的小人动画一样,代码如下。

import pygame

pygame.init()
screen=pygame.display.set_mode((600,800))
pygame.display.set_caption("这是一个飞机游戏")
icon=pygame.image.load(r'E:\2dsrc\src\img\hero1.png')
bg=pygame.image.load(r'E:\2dsrc\src\img\bg.png')
pygame.display.set_icon(icon)
#游戏主循环
while True:
    #事件遍历
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            exit()
	screen.blit(bg,(0,0))

👸小媛:那个 0,0 意思就是表示在左上角开始从头绘制是吧?

🐰小C:是的,其实哪一个代码少了一个很关键的内容你知道是啥吗?

👸小媛:我。。。忘记了。

🐰小C:少了一个屏幕更新,我们应该在每次循环的时候都应该刷新屏幕,因为我们每次都需要绘制一些游戏元素到这个窗口中。

import pygame

pygame.init()
screen=pygame.display.set_mode((600,800))
pygame.display.set_caption("这是一个飞机游戏")
icon=pygame.image.load(r'E:\2dsrc\src\img\hero1.png')
bg=pygame.image.load(r'E:\2dsrc\src\img\bg.png')
pygame.display.set_icon(icon)
#游戏主循环
while True:
    #事件遍历
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            exit()
	screen.blit(bg,(0,0))
	pygame.display.update()


👸小媛:我点了右上角后确实退出了,贼棒。


转载:https://blog.csdn.net/A757291228/article/details/116297241
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场