美文网首页
小飞机(二)

小飞机(二)

作者: 孟哲凡 | 来源:发表于2018-12-27 14:03 被阅读0次

继续上次的话题,上次我们做了封面,这次我们先要精细化封面。也就是绘制点文字到上面,顺便加个背景音乐。

我们先做一个绘制文字的方法,然后用这个方法绘制。方法是这样的

'''
draw_text: 绘制文字的方法
    surf:(pygame里面每个画面都当作surface,譬如之前的main_pic,screen这些),
        这里是待传入要绘制的画面
    text: 要绘制的文本
    size: 要绘制的尺寸
    x,y:  要绘制的位置
'''
def draw_text(surf, text, size, x, y):
    # 字体设置
    font = pygame.font.Font(pygame.font.match_font('FangSong'), size)  
    # 将要绘制的文本处理成surface,参数:文本,抗锯齿(bool),颜色
    text_surface = font.render(text, True, (255, 255, 255)) 
    # 获取文字画面的尺寸
    text_rect = text_surface.get_rect()
    # 确定位置
    text_rect.midtop = (x, y) 
    # 将文字画面绘制到传入的画面上
    surf.blit(text_surface, text_rect)

有了这个方法,我们就可以在封面上绘制文字了,需要注意的是如果要绘制中文的话,字体的格式就要是支持中文的。譬如我们用到的FangSong。
然后我们绘制两行文字:

draw_text(screen, "按 [ENTER] 键开始游戏", 30, WIDTH/2, HEIGHT/2)
draw_text(screen, "或按 [Q] 键退出游戏", 30, WIDTH/2, (HEIGHT/2)+40)

这样以后运行一次,效果是下面这样的:


绘制文字后.png

接下来,我们不着急去实现这两行文字的具体功能,在我们声音的素材库里面,有封面的声音,我们可以先把声音加上,做到绘声绘色。
这里要用到的是mixer,是一个用来处理声音的模块,其含义为“混音器”,可以用来制造声音和播放声音

# 初始化声音模块
pygame.mixer.init() 

然后加载播放音乐

# 加载目录声音
pygame.mixer.music.load(path.join(sound_folder, "menu.ogg"))
# 设置为循环播放并进行播放
pygame.mixer.music.play(-1)

然后试着运行就会发现声音出现了,有点大,也可以设置的小一点。
我们现在去处理那两行的文字的内容
同样是基于昨天的话题,我们认识到要捕获事件然后去处理,所以我们要处理[Enter]和[Q]两个事件,就把它放在之前的循环里面

while running:
    # 刷新屏幕
    pygame.display.update()
    # 得到并遍历程序的事件
    for event in pygame.event.get():
        # 如果是退出事件,结束循环
        if event.type == pygame.QUIT:
            running = False
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_RETURN:
                print("进入下一个界面")
                break
            elif event.key == pygame.K_q:
                pygame.quit()
                quit()

这里要考量一个问题,就是打印“进入下一个界面”具体要怎么去实现,我们可以在打印后面加上

# 用黑色填充界面,用以清屏
screen.fill((0, 0, 0))
# 绘制文字
draw_text(screen, "GET READY!", 40, WIDTH / 2, HEIGHT / 2)

这样看似在回车以后可以进入下一个页面,可这两个语句在for里面,也在if里面,也就是说enter和q依旧是有效的,我们试着按q键,依旧退出了游戏,所以说这两个语句应该是没问题的,但是添加的位置有问题。

我们这样去想,我们要什么是在刚才的while循环里面一直有效的1.画面刷新,2.右上角的x键的退出。但是Enter和q就不是。但是他们属于事件驱动,如果不是enter和q或退出,它也是持久在那个画面的,所以我们很自然的想到可以再添加一个循环,将退出条件设置一下就好。那么我们的代码就变成:

while True:
    # poll和之前的get还是有区别的,它会根据当前的实际事件立即返回,
    # #如果没有事件,就会返回NoEvent
    event = pygame.event.poll()
    if event.type == pygame.KEYDOWN:
        if event.key == pygame.K_RETURN:
            print("进入下一个界面")
            break
        elif event.key == pygame.K_q:
            pygame.quit()
            quit()
    elif event.type == pygame.QUIT:
        pygame.quit()
        quit()

# 用黑色填充界面,用以清屏
screen.fill((0, 0, 0))
# 绘制文字
draw_text(screen, "GET READY!", 40, WIDTH / 2, HEIGHT / 2)

我们看下回车之后的效果,是下面这样的,当然这个其实没什么必要,也纯粹是个过渡效果,加上我们的素材里面刚好有这段语音,所以做了。


Get Ready.png

像之前一样添加一下语音

# 另一种加载音乐的方式,这样返回的对象带有play,stop...这类的方法
ready=pygame.mixer.Sound(path.join(sound_folder,'getready.ogg'))
#播放声音
ready.play()

然后我们在等待一段时间后,自动开始正式的游戏。代码是这样的:

# ready界面的更新
pygame.display.update()

# 等待2000毫秒
pygame.time.wait(2000)
# 停止之前的音乐
pygame.mixer.music.stop()

# 加载游戏界面的背景图片
background = pygame.image.load(path.join(img_dir, 'starfield.png')).convert()
background_rect = background.get_rect()
# 绘制背景图片
screen.blit(background, background_rect)
# 加载游戏音乐
pygame.mixer.music.load(path.join(sound_folder, 'tgfcoder-FrozenJam-SeamlessLoop.ogg'))
# 循环播放游戏音乐
pygame.mixer.music.play(-1)

效果是下面这样的(当然声音是不能这样展示的):


游戏正式画面.png

然后后续我们就会在这个画面上面添加各种元素,效果。当然在这个过程中间,会夹杂一些对代码的整理,因为这是一个很重要的过程,也是一个很不错的习惯。
代码放在:https://pan.baidu.com/s/1YB7bhJndyfAlzC67t5AC7g

相关文章

  • 小飞机(二)

    继续上次的话题,上次我们做了封面,这次我们先要精细化封面。也就是绘制点文字到上面,顺便加个背景音乐。 我们先做一个...

  • 亲子日记(23)平衡车

    2018.3.27周二 晴 周日,子恒在楼下跟小朋友玩,遥控小飞机,几架小飞机漫天飞舞。后来风力变大,飞机...

  • 小飞机

    二宝说:这个飞机带拐弯系统的 程程:气流blabla 上升blabla 下降……

  • 小飞机

    我有一辆小飞机,让孩子自己设计飞机的用途,有的说可以载物,载病人,载囚人 上传中,请稍候... 上传中,请稍候.....

  • 小飞机

    最近,学校里流行玩一种游戏,就是捡“小飞机”,所谓的“小飞机”就是风信子。 我们之所以叫它叫“小飞...

  • 小飞机

  • 小飞机

    今天我要介绍小飞机。它的主要颜色有橘色和绿色。它的前面是兰和橘和绿,中间是蓝和浅绿和绿和蓝,后面是南和绿和橘。他的...

  • 小飞机

    嗡~~~蚊子从我耳边小飞机一样地飞过。赶紧四面查看,已经不见踪迹。我喝着咖啡,不时两下张望却一无所获。脑海里不自觉...

  • 小飞机

    无声无声荧火飞,天外天外夜里亮。 低说低说小飞机,银光银光熠熠生。

  • 小飞机

    我最喜欢的玩具是小飞机,它的身子是白色的,小飞机它的全身像小鸟,它可已做好多人不值一架飞机还有好多架飞机。值要充满...

网友评论

      本文标题:小飞机(二)

      本文链接:https://www.haomeiwen.com/subject/hrrrlqtx.html