小飞机(二)

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

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

'''
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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,458评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,030评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,879评论 0 358
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,278评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,296评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,019评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,633评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,541评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,068评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,181评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,318评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,991评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,670评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,183评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,302评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,655评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,327评论 2 358

推荐阅读更多精彩内容

  • 发信站: 虎踞龙蟠SBBS (Tue Aug 25 08:39:52 2009), 站内 初到美国的时候,在一位同...
    无言的ID阅读 242评论 0 0
  • 哲理组诗 1.关系 人在吃鱼 蚊子在吃人 人吃的是鱼的肉 蚊子喝的是人的血 鱼活着的时候 它吃蚊子的幼虫 现在,鱼...
    留云侠客阅读 386评论 2 2
  • 人生,是一场修行。有人修成正果,有人坠入深渊。为何会有这样截然不同的结果,细细想来,应该是选择不一样。人生有这么多...
    YY171201阅读 215评论 0 1
  • 时间真是一个无情的家伙,自顾自的走,它可曾回头看过,它可以回头看吗?我不知道,但我想回头看看,回忆回忆那些久违的事...
    孔小七阅读 490评论 0 1
  • 初中的日子 是煎熬的,为了平衡各科的成绩,总是拿起这个放下那个无法全面发展而头疼不已 ;初中的日子也是有趣的,即便...
    远路的她阅读 326评论 0 2