pygame学习

pygame创建窗口后窗口未响应,或pygame 窗口每次无法正常关闭
https://blog.csdn.net/zsc201825/article/details/81082173

第一章

传送门

pygame学习
pygame学习

; 第一个程序

效果图

pygame学习

import pygame

from pygame.locals import *

import sys

background_image_filename = 'sushiplate.jpg'
mouse_image_filename = 'fugu.png'

pygame.init()

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

pygame.display.set_caption("Hello, World!")

background = pygame.image.load(background_image_filename).convert()
mouse_cursor = pygame.image.load(mouse_image_filename).convert_alpha()

while True:

    for event in pygame.event.get():
        if event.type == QUIT:

            pygame.quit()
            sys.exit()

    screen.blit(background, (0,0))

    x, y = pygame.mouse.get_pos()

    x-= mouse_cursor.get_width() / 2
    y-= mouse_cursor.get_height() / 2

    screen.blit(mouse_cursor, (x, y))

    pygame.display.update()

函数讲解
set_mode

  • 会返回一个Surface对象,代表了在桌面上出现的那个窗口,三个参数第一个为元祖,代表分 辨率(必须);第二个是一个标志位,具体意思见下表,如果不用什么特性,就指定0;第三个为色深。

pygame学习
convert函数
  • 是将图像数据都转化为Surface对象,每次加载完图像以后就应该做这件事件(事实上因为 它太常用了,如果你不写pygame也会帮你做);convert_alpha相比convert,保留了Alpha 通道信息(可以简单理解为透明的部分),这样我们的光标才可以是不规则的形状。

主循环

  • 游戏的主循环是一个无限循环,直到用户跳出。在这个主循环里做的事情就是不停地画背景和更新光标位置,虽然背景是不动的,我们还是需要每次都画它, 否则鼠标覆盖过的位置就不能恢复正常了。

blit

  • blit是个重要函数,第一个参数为一个Surface对象,第二个为左上角位置。画完以后一定记得用update更新一下,否则画面一片漆黑。

第二章——事件

事件

  • 我们上一个程序,会一直运行下去,直到你关闭窗口而产生了一个QUIT事件,Pygame会接受用户的各种操作(比如按键盘,移动鼠标等)产生事件。事件随时可能发生,而且量也可能会很大,Pygame的做法是把一系列的事件存放一个队列里,逐个的处理。

事件检索

  • pygame.event.get()来处理所有的事件,这好像打开大门让所有的人进入。
  • pygame.event.wait(),Pygame就会等到发生一个事件才继续下去
  • pygame.event.poll()一旦调用,它会根据现在的情形返回一个真实的事件,或者一个”什么都没有”。

事件集

pygame学习
处理鼠标事件

处理键盘事件

事件过滤

  • pygame.event.set_blocked(事件名) 过滤掉不感兴趣的事情
  • pygame.event.set_allowed()来设定允许的事件。

产生事件

  • pygame 可以产生事件

详细见

; 第三章——屏幕显示

全屏显示操作

可变尺寸显示

详细见

第四章——字体

最后字体是存成一个图片

my_name = "Will McGugan"
import pygame
pygame.init()
my_font = pygame.font.SysFont("arial", 64)
name_surface = my_font.render(my_name, True, (0, 0, 0), (255, 255, 255))
pygame.image.save(name_surface, "name.png")

中文如何显示

错误补捉

  • 比如图片文件不存在的情况

详细见

第五章——像素和颜色

详细见

第六章——Surface

Surface对象

  • 对于Pygame而已,加载图片就是pygame.image.load,给它一个文件名然后就还给你一个surface对象。尽管读入的图像格式各不相同,surface对象隐藏了这些不同。你可以对一个Surface对象进行涂画、变形、复制等各种操作。事实上,屏幕也只是一个surface,pygame.display.set_mode就返回了一个屏幕surface对象。

创建Surfaces对象

  • 一种方法就是刚刚说的pygame.image.load,这个surface有着和图像相同的尺寸和颜色;
  • 另外一种方法是指定尺寸创建一个空的surface

转换Surfaces

background = pygame.image.load(background_image_filename).convert()
mouse_cursor = pygame.image.load(mouse_image_filename).convert_alpha()

矩形对象

  • 一般来说在制定一个区域的时候,矩形是必须的,比如在屏幕的一部分画东西。在pygame中矩形对象极为常用,它的指定方法可以用一个四元素的元组,或者两个二元素的元组,前两个数为左上坐标,后两位为右下坐标。
  • Pygame中有一个Rect类,用来存储和处理矩形对象

剪裁(Clipping)

  • 通常游戏的时候你只需要绘制屏幕的一部分。比如魔兽上面是菜单,下面是操作面板,中间的小兵和英雄打的不可开交时候,上下的部分也是保持相对不动的。为了实现这一点,surface就有了一种叫裁剪区域(clipping area)的东西,也是一个矩形,定义了哪部分会被绘制,也就是说一旦定义了这个区域,那么只有这个区域内的像素会被修改,其他的位置保持不变,默认情况下,这个区域是所有地方。我们可以使用set_clip来设定,使用get_clip来获得这个区域。

子表面(Subsurfaces)

  • Subsurface就是在一个Surface中再提取一个Surface

填充Surface

设置Surface的像素

获得Surface上的像素

锁定Surface

  • 当Pygame往surface上画东西的时候,首先会把surface锁住,以保证不会有其它的进程来干扰,画完之后再解锁

Blitting

  • 将一个平面的一部分或全部图象整块从这个平面复制到另一个平面

详细见

第七章——绘制图形

pygame.draw函数

  • pygame.draw中函数的第一个参数总是一个surface,然后是颜色,再后会是一系列的坐标等。
  • 返回值是一个Rect对象,包含了绘制的领域

pygame学习
详细见

; 第八章——产生动画和控制帧率

运动

  • 游戏中的所谓运动(尤其是2D游戏),不过是把一个物体的坐标改一下而已。

时间模块

  • 我们的动画基于时间运作,我们需要知道上一个画面到现在经过了多少时间,然后我们才能决定是否开始绘制下一幅。pygame.time模块给我们提供了一个Clock的对象,使我们可以轻易做到这一些:
clock = pygame.time.Clock()
time_passed = clock.tick()
time_passed = clock.tick(30)

第一行初始化了一个Clock对象;第二行的意识是返回一个上次调用的时间(以毫秒计);第三行非常有用,在每一个循环中加上它,那么给tick方法加上的参数就成为了游戏绘制的最大帧率

详细见

第九章——向量

  • 所谓动画,不过是在每一帧上,相对前一帧把精灵的坐标在加减一些而已;
  • 使用时间来计算加减的量以在不同性能的计算机上获得一致的动画效果;
  • 使用向量来计算运动的过程来 减轻我们的劳动,有专门的向量库

详细见

第十章——输入进阶

  • 第二部分也稍微使用了一下键盘,那时候是用了pygame.event.get()获取所有的事件,当event.type == KEYDOWN的时候,在判断event.key的种类,而各个种类也使用K_a,K_b……等判断。这里再介绍一个pygame.key.get_pressed()来获得所有按下的键值,它会返回一个元组。这个元组的索引就是键值,对应的就是是否按下

key模块

pygame学习

; 第十一章——鼠标进阶

pygame学习

第十四章

Original: https://blog.csdn.net/weixin_41413511/article/details/117924565
Author: 王蒟蒻
Title: pygame学习

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/781888/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球