Pygame官方文档-Tutorials-Pygame模块介绍(Introductiont。。。

Pygame官⽅⽂档-Tutorials-Pygame模块介绍(Introductiont。。。Python 的Pygame模块介绍(Python Pygame Introduction)
Author: Pete Shinners
Contact:
这篇⽂章为Python程序员介绍了pygame库。 原始版本出现在Py Zine,第1卷第3期。此版本包含⼀些⼩修订,以创建⼀个全⾯的更好的⽂章。 Pygame是⼀个Python扩展库,它包装了SDL库及其助⼿。
历史(HISTORY)
Pygame始于2000年夏天。作为⼀名多年的C程序员,我⼏乎同时发现了Python和SDL。您已熟悉Python,版本为1.5.2。您可能需要SDL的介绍,即Simple DirectMedia Layer。 SDL由Sam Lantinga创建,是⼀个⽤于控制多媒体的跨平台C库,与DirectX相当。它已被⽤于数百种商业和开源游戏。我对两个项⽬的⼲净和简洁感到印象深刻,不久之后我意识到混合Python和SDL是⼀个有趣的提议。
我发现了⼀个已经完成的⼩项⽬,具有完全相同的想法,PySDL。由Mark Baker创建,PySDL是⼀个简单的SDL实现,作为Python扩展。界⾯⽐通⽤的SWIG包装更⼲净,但我觉得它强制使⽤“C风格”的代码。 PySDL的突然死亡促使我接受了我⾃⼰的新项⽬。
我想组建⼀个真正充分利⽤Python的项⽬。我的⽬标是让做简单的事情变得容易,并且能直接做出困难的事情。 Pygame项⽬于2000年10⽉启动。六个⽉后,pygame版本1.0发布。
尝试(TASTE)
我发现了解新库的最佳⽅法是直接跳到⼀个例⼦中。 在pygame的早期,我⽤7⾏代码创建了⼀个弹跳球动画。 让我们来看看同样东西的更友好版本。 这应该⾜够简单,随后可以完成细分。
import sys, pygame
pygame.init()
size = width, height =320,240
speed =[2,2]大连港集团董事长
black =0,0,0
screen = pygame.display.set_mode(size)
ball = pygame.image.load("intro_ball.gif")
ballrect = _rect()
while1:
for event in ():
pe== pygame.QUIT: it()
ballrect = ve(speed)
设计材料if ballrect.left <0or ballrect.right > width:
speed[0]=-speed[0]
p <0or ballrect.bottom > height:
speed[1]=-speed[1]
screen.fill(black)
screen.blit(ball, ballrect)
pygame.display.flip()
这就像你可以获得⼀个弹跳动画⼀样简单。⾸先,我们看到导⼊和初始化pygame并不值得注意。导⼊pygame使⽤所有可⽤的pygame模块导⼊包。对pygame.init()的调⽤初始化了每个模块。
在第8⾏,我们创建了⼀个图形窗⼝,调⽤pygame.display.set_mode()。 Pygame和SDL通过默认为图形硬件的最佳图形模式使这变得容易。您可以覆盖模式,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⾏,我们的程序已初始化并准备运⾏。在⽆限循环(死循环)中,我们检查⽤户输⼊,移动球,然后绘制球。如果您熟悉GUI编程,那么您就具有事件和事件循环的经验。在pygame中,这没有什么不同,我们检查是否发⽣了QUIT事件。如果是这样,我们只需退出程序,pygame将确保⼀切都⼲净利落。
是时候更新球的位置了。第17到21⾏将ballrect变量⽤⽬前速度移动。如果球移动到屏幕外,我们将朝那个⽅向反转速度。不完全是⽜顿物理学,但它是我们所需要的。
茶与诗在第23⾏,我们通过填充⿊⾊RGB颜⾊来擦除屏幕。如果您从未使⽤动画,这可能看起来很奇怪。你可能会问“我们为什么要擦掉任何东西,为什么我们不仅把球移到屏幕上?”这不是计算机动画的⼯作⽅式。动画只不过是⼀系列单个图像,按顺序显⽰时,可以很好地愚弄⼈眼看动作。屏幕只是⽤户看到的单个图像。如果我们没有花时间从屏幕上擦掉球,我们实际上会看到球的“踪迹”,因为我们不断将球拉到新位置。
在第24⾏,我们将球图像绘制到屏幕上。图像的绘制由Surface.blit()⽅法处理。 blit基本上意味着将像素颜⾊从⼀个图像复制到另⼀个图像。我们将blit⽅法传递给要复制的源(source)Surface,以及将源放置到⽬标上的位置。
cscd
我们需要做的最后⼀件事是实际更新可见显⽰。 Pygame使⽤双缓冲区管理显⽰(display)。当我们完成绘制时,我们调⽤pygame.display.flip()将完整显⽰Surface更新为屏幕⽅法。这使得我们在屏幕Surface上绘制的所有内容都变得可见。这种缓冲确保我们只能在屏幕上看到完全绘制的帧。没有它,⽤户将在创建时看到屏幕的⼀半完成部分。
这是对pygame的简短介绍。 Pygame还有⼀些模块可以处理键盘,⿏标和摇杆(joystick)的输⼊处理。pygame可以混合⾳频和解码流媒体⾳乐。使⽤Surfaces,您可以绘制简单的形状,旋转和缩放图⽚,甚⾄可以实时处理图像的像素作为numpy数组。 Pygame还具有作为PyOpenGL的跨平台显⽰层的能⼒。⼤多数pygame模块都是⽤C语⾔编写的,实际上很少⽤Python完成。
pygame⽹站提供了针对所有pygame函数的完整参考⽂档以及适⽤于所有⽤户范围的教程。 pygame源附带了许多例如 monkey punching和UFO射击的例⼦。
Python和游戏
“Python适合游戏吗?”答案是,“这取决于游戏。”
Python实际上⾮常有能⼒运⾏游戏。甚⾄可能会在30毫秒内让您感到惊讶。尽管如此,⼀旦你的游戏开始变得更复杂,就不难达到上限。任何实时运⾏的游戏都将充分利⽤计算机。
在过去⼏年中,游戏开发出现了⼀个有趣的趋势,即向更⾼级别的语⾔发展。通常游戏分为两个主要部分。游戏引擎必须尽可能快,以及游戏逻辑,这使得引擎确实做了⼀些事情。不久前,游戏的引擎是⽤汇编编写的,部分⽤C语⾔编写。现在,C已经转移到了游戏引擎,⽽游戏本⾝通常是⽤更⾼级别的脚本语⾔编写的。像雷神之锤III竞技场Quake3和虚幻引擎Unreal这样的游戏将这些脚本作为可移植字节码运⾏。
2001年初,开发商Rebel Act Studios完成了他们的游戏,Severance:Blade of Darkness。使⽤他们⾃⼰的⾃定义3D引擎,游戏的其余部分是⽤Python编写的。这个是⼀个⾎腥的第三⼈称战⽃游戏。在探索地下城和城堡的同时,你可以控制中世纪的战⼠进⼊错综复杂的斩⾸组合攻击。您可以为此游戏下载第三⽅附加组件,并发现它们只不过是Python源⽂件。
最近,Python已被⽤于各种游戏,如⾃由⼒量Freedom Force和巨⼤后院运动Humungous’Backyard Sports Series。
Pygame和SDL是2D游戏的优秀C引擎。游戏仍然会发现他们运⾏时的最⼤部分是在SDL内部处理图形。 SDL可以利⽤图形硬件加速。启⽤此功能可以将游戏从每秒40帧运⾏到每秒200帧以上。当你看到你的Python游戏以每秒200帧的速度运⾏时,你会发现Python 和游戏可以协同⼯作。
令⼈印象深刻的是Python和SDL在多个平台上的⼯作情况。例如,在2001年5⽉,我发布了⾃⼰的完整pygame项⽬,SolarWolf,⼀款街机风格的动作游戏。让我感到惊讶的⼀件事是,⼀年之后,不需要任何补丁,错误修复或更新。游戏完全是在Windows上开发的,但是在Linux,Mac OSX和许多Unix上运⾏,⽽我没有任何额外的⼯作。
但仍有⾮常明显的局限性。管理硬件加速图形的最佳⽅法并不总是从软件渲染中获得最快结果的⽅法。并⾮所有平台都提供硬件⽀持。当游戏变得更复杂时,它通常必须承诺⼀个或另⼀个。 SDL还有其他⼀些设计限制,例如全屏滚动图形可以快速将游戏降低到⽆法游玩的速度。虽然SDL不适合所有类型的游戏,但请记住像Loki这样的公司已经使⽤SDL来运⾏各种各样的零售质量游戏。
在编写游戏时,Pygame相当低级。您很快就会发现⾃⼰需要将常⽤功能包装到您⾃⼰的游戏环境中。关于这⼀点的好处是pygame ⾥⾯没有任何东西妨碍你。您的程序完全控制着⼀切。这样做的副
作⽤是你会发现⾃⼰借了很多代码来组建⼀个更⾼级的框架。你需要更好地了解⾃⼰在做什么。
瑞文智力测验闭幕(closing)
开发游戏是⾮常有益的,能够看到你编写的代码并与之交互是令⼈兴奋的。 Pygame⽬前有近30个其他项⽬使⽤它。它们中的⼀些现在已经可以游玩了。您可能会对访问pygame⽹站感到惊讶,并了解其他⽤户可以使⽤Python做些什么。
引起我注意的⼀件事是第⼀次尝试游戏开发的⼈来到Python。我可以看到为什么游戏对于新程序员来说是⼀种吸引⼒,但是由于创建游戏需要更加深⼊地理解语⾔,因此可能很困难。我试图通过对这些概念不熟悉的⼈编写许多⽰例和pygame教程来⽀持这组⽤户。
最后,我的建议是保持简单。我不能强调这⼀点。如果您打算创建第⼀个游戏,那么有很多东西需要学习。即使是更简单的游戏也会挑战你的设计,⽽复杂的游戏并不⼀定意味着有趣的游戏。当您了解Python时,您可以使⽤pygame在⼀两周内创建⼀个简单的游戏。从那⾥你需要花费⼤量的时间来添加抛光剂,使其成为⼀个完整的可展⽰游戏。
Pygame模块概述
模块名称模块功能
播放/回放
加载光标图像,包括标准指针
控制显⽰窗⼝或屏幕东乡人论坛
在Surface对象上绘制简单的形状
模块名称模块功能
管理事件和事件队列
create和render TrueType字体
保存和加载图像
管理操纵杆设备
管理键盘
管理⿏标
⽤numpy操纵声⾳
⽤numpy操纵图像
控制时间
缩放,旋转和翻转图像
以上内容,⾃⼰翻译,可能有误,可参考:
Fin.

本文发布于:2024-09-23 17:10:17,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/256512.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:游戏   图像   屏幕
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议