首页 > 其他 > 详细

pygame模块学习2

时间:2020-04-14 16:13:17      阅读:75      评论:0      收藏:0      [点我收藏+]

初次尝试

我发现理解新模块的最佳方法是直接跳入示例。 在学习pygame的早期,我用7行代码创建了一个弹跳球动画。这应该足够简单以便后续进行,然后进行完整的分解。

代码如下:

 1 import sys, pygame
 2 pygame.init()
 3 
 4 size = width, height = 320, 240
 5 speed = [2, 2]
 6 black = 0, 0, 0
 7 
 8 screen = pygame.display.set_mode(size)
 9 
10 ball = pygame.image.load("intro_ball.gif")
11 ballrect = ball.get_rect()
12 
13 while 1:
14     for event in pygame.event.get():
15         if event.type == pygame.QUIT: sys.exit()
16 
17     ballrect = ballrect.move(speed)
18     if ballrect.left < 0 or ballrect.right > width:
19         speed[0] = -speed[0]
20     if ballrect.top < 0 or ballrect.bottom > height:
21         speed[1] = -speed[1]
22 
23     screen.fill(black)
24     screen.blit(ball, ballrect)
25     pygame.display.flip()

这个弹跳动画示例比较简单。首先,我们看到导入和初始化pygame。 import pygame会导入包含所有可用pygame模块的软件包。调用pygame.init()会初始化每个模块。

在第8行,我们创建了一个图形窗口,其中包含对pygame.display.set_mode()的调用。 Pygame和SDL通过默认使用图形硬件的最佳图形模式来简化此操作。 Pygame将图像表示为Surface对象。 display.set_mode()函数创建一个新的Surface对象,该对象代表实际显示的图形。我们对此Surface对象所做的任何绘图都将在控制台上显示。

在第10行,我们加载球图像。 Pygame通过SDL_image库支持多种图像格式,包括BMP,JPG,PNG,TGA和GIF。 pygame.image.load()函数返回一个包含球图片数据的Surface。 Surface将保留文件中的所有colorkey或alpha透明度(这个后面会提到)。加载球图像后,我们创建一个名为Ballrect的变量。 Pygame带有一个方便的实用程序对象类型,称为Rect,它表示一个矩形区域(可以简单的理解为这是一个图片元素的定位,相当于平面坐标,只不过包含更多的信息)。在代码的动画部分,我们将看到Rect对象可以做什么。

到了第13行,我们的程序已初始化并准备运行。在无限循环内,我们检查用户输入,移动球,然后绘制球。在pygame中我们监听一个事件,我们检查是否发生了QUIT事件。如果是这样,我们只是退出程序,pygame将确保一切都正常关闭。

第17行以当前速度移动ballrect变量。如果球已移到屏幕外,我们可以按照自己的想法让他发生偏移。

在第23行,我们通过用黑色RGB颜色填充屏幕来擦除屏幕。我们可能会问:“为什么我们需要擦除任何东西,为什么不只是在屏幕上移动球呢?”那不是计算机动画工作的方式。动画只不过是一系列的单张图像,当按顺序显示时,它们可以很好地欺骗人眼看运动。屏幕只是用户看到的单个图像。如果我们不花时间从屏幕上擦除球,则当我们不断将球拖到新位置时,实际上会看到球的“痕迹”。这一点可能不太好理解,这个我们可以想象猫和老鼠的动画制作,每一个动作都是成千上万的单个图片快速滑动的结果,就像一个动画效果走一步,可能需要几百张图片闪过来完成这个效果。

在第24行,我们将球图像绘制到屏幕上。图像的绘制由Surface.blit()方法处理。从根本上说,blit意味着将像素颜色从一个图像复制到另一个图像。我们将blit方法传递给要从其复制的源Surface(可以理解为图片存放的位置),以及将源放置到目标的位置(图片插入到屏幕的位置)。

我们要做的最后一件事实际上是更新可见显示。 Pygame使用双缓冲区管理显示。完成绘制后,我们调用pygame.display.flip()将完整显示的Surface更新为screen方法。这使我们在屏幕“曲面”上绘制的所有内容均可见。这种缓冲确保了我们只能在屏幕上看到完全绘制的帧。没有它,用户将在创建时看到屏幕的一半完成部分。

到此结束对pygame的简短介绍。 Pygame还具有执行诸如键盘,鼠标和操纵杆输入处理之类的模块的功能。它可以混合音频并解码流音乐。使用“曲面”,您可以绘制简单的形状,旋转和缩放图片,甚至可以作为numpy数组实时处理图像的像素。大部分pygame模块都是用C编写的,实际上很少是用Python完成的。

pygame模块学习2

原文:https://www.cnblogs.com/Iloveyy/p/12698578.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!