Python之pygame,从入门到精通(三)

Python之pygame,从入门到精通(三)

在这里插入图片描述
首先,没有人可以否定好的画面是一款游戏吸引人最直接最诱人得因素(网易游戏得美工是真的好!!),虽说滥画面高游戏度得作品也有,但优秀得画面无疑是一张过硬得通行证,可以让你争取到更多得机会。
在这里插入图片描述
其实上两回也已经打开过显示了,不过没有特别说明而已,pygame.display.set_mode()就是创建一个游戏窗口,也就是显示得意思。

全屏显示

我们再第一个程序里使用了如下的语句

screen = pygame.display.set_mode((640, 480), 0, 32)

也讲诉了各个参数的意思,当我们把第二个参数设置为FULLSCREEN时,就能得到一个全屏窗口了。

screen = pygame.display.set_mode((640, 480), FULLSCREEN ,32)

注意:如果你的程序有什么问题,很可能进入全屏模式就不太容易退出来了,所以最好先用窗口模式调试好,再改为全屏模式。

在全屏模式下,显卡可能就切换了一种模式,你可以用如下代码获取你的机器支持的显示模式:

import pygame
pygame.init()
pygame.display.list_modes()

看下一个实例:

# _*_coding:utf-8_*_

import pygame
from pygame.locals import *
from sys import exit


pygame.init()
pygame.display.set_caption('window-size')

background_image = 'yys1.jpg'
screen = pygame.display.set_mode((640, 480), 0, 32)
background = pygame.image.load(background_image).convert()

fullscreen = False

while True:

    for event in pygame.event.get():
        if event.type == QUIT:
            exit()
    if event.type == KEYDOWN:
        if event.key == K_F1:
            fullscreen = not fullscreen
            if fullscreen:
                screen = pygame.display.set_mode((640, 480), FULLSCREEN, 32)
            else:
                screen = pygame.display.set_mode((640, 480), 0, 32)

    screen.blit(background, (0, 0))
    pygame.display.update()

运行这个程序,默认还是窗口模式,但按下F1,显示模式就会在窗口和全屏之间切换。

可变尺寸显示

虽然一般的程序窗口都能拖边框来改变大小,pygame的默认显示窗口是不行的,而事实上,很多游戏确实不能改变显示窗口的大小,我们可以使用一个参数来改变这个默认行为。

# _*_coding:utf-8_*_

import pygame
from pygame.locals import *
from sys import exit


SCREEN_SIZE = (640, 480)

pygame.init()
screen = pygame.display.set_mode(SCREEN_SIZE, RESIZABLE, 32)

background_image = 'yys1.jpg'
background = pygame.image.load(background_image).convert()

while True:
    event = pygame.event.wait()
    if event.type == QUIT:
        exit()

    if event.type == VIDEORESIZE:
        SCREEN_SIZE = event.size
        screen = pygame.display.set_mode(SCREEN_SIZE, RESIZABLE, 32)
        pygame.display.set_caption("Window resize to" + str(event.size))

    screen_width, screen_height = SCREEN_SIZE
    for y in range(0, screen_height, background.get_height()):
        for x in range(0, screen_width, background.get_width()):
            screen.blit(background, (x, y))

    pygame.display.update()

当你更改大小的时候,后端控制台会显出最新的尺寸,这里我们学习到一个新事件VIDEORESIZE,它包含如下内容:

  • size:一个二维元组,值为更改后的窗口尺寸,size[0]为宽,size[1]为高
  • w:宽
  • h:高
其它、复合模式

我们还有一些其他的显示模式,但未必所有的操作系统都支持(window、各种比较流行的Linux发行办都是没有问题的),一般来说窗口就用0,全屏就用FULLSCREEN,这两个时没有问题的。

如果你想创建一个硬件显示(surface会存放在显存里,从而有着更高的速度),但必须和全屏一起用:

screen  = pygame.display.set_mode(SCREEN, HWSURFACE | FULLSCREEN, 32)

当然你完全可以把双缓冲(更快)DOUBLEBUF也加上,这就是一个很nice的游戏显示了,不过记得你要使用pygame.display.flip()来刷新显示。pygame.display.update()是将数据画到前面显示,而这个是交替显示的意思。

还有OPENGL模式,这是一个得到广泛应用的3D加速显示模式。不过一旦使用了这个模式,pygame中的2D图像函数就不能使用了,我们会在以后讲详细的内容。

  • 14
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值