pygame学习教程(一)pygame介绍引自官网

网上有很多pygame的教程,我写这个系列是因为我在学习的过程中响起当年Win32编程,自己编写Form,Message,事件响应。虽然现在已经有很多方法可以帮我们实现这些,如果自己写一遍会体会很深。
第一篇介绍。
https://www.pygame.org/docs/tut/PygameIntro.html 原文链接
This article is an introduction to the pygame library for Python programmers. The original version appeared in the Py Zine, volume 1 issue 3. This version contains minor revisions, to create an all-around better article. Pygame is a Python extension library that wraps the SDL library and its helpers.
本文是针对Python程序 pygame库。原始版本出现在Py Zine第1卷,第3期。这个版本包含了一些小的修改,以创建一个全面的更好的文章.PyGames是一个Python扩展库,它封装了SDL库及其助手。
HISTORY
Pygame started in the summer of 2000. Being a C programmer of many years, I discovered both Python and SDL at about the same time. You are already familiar with Python, which was at version 1.5.2. You may need an introduction to SDL, which is the Simple DirectMedia Layer. Created by Sam Lantinga, SDL is a cross-platform C library for controlling multimedia, comparable to DirectX. It has been used for hundreds of commercial and open source games. I was impressed at how clean and straightforward both projects were and it wasn’t long before I realized mixing Python and SDL was an interesting proposal.
历史¶
Pygame始于2000年夏天。作为一名多年的C程序员,我几乎同时发现了Python和SDL。Python当时版本为1.5.2。您可能需要介绍SDL,这是一个简单的DirectMedia层。SDL由SamLantinga创建,是一个用于控制多媒体的跨平台C库,类似于DirectX。它已经被用于数百个商业和开源游戏。令我印象深刻的是,这两个项目是多么干净和简单,不久我就意识到将Python和SDL混合是一个有趣的提议。
后面的翻译都在程序里。
TASTE
I find the best way to understand a new library is to jump straight into an example. In the early days of pygame, I created a bouncing ball animation with 7 lines of code. Let’s take a look at a friendlier version of that same thing. This should be simple enough to follow along, and a complete breakdown follows.
尝试
我发现理解一个新库的最好方法是直接进入一个例子。在游戏的早期,我用7行代码创建了一个弹跳球动画。让我们看一看同样的东西更友好的版本。这应该是足够简单的跟随,然后是一个完整的细分
后面的翻译我都写到程序的注释。
在这里插入图片描述
下面是代码

#coding:utf8
import sys, pygame #mport pygame导入包含所有可供使用的游戏模块的包。
import time

pygame.init()       #调用 pygame.init()初始化这些模块中的每一个。

size = width, height = 320, 240
speed = [1, 2]
black = 0, 0, 0

screen = pygame.display.set_mode(size)
'''
PyGames和SDL通过默认图形硬件的最佳图形模式来简化这一模式。您可以重载该模式,
SDL将补偿硬件无法做的任何事情。PyGames将图像表示为表面物品。display.set_mode()函数创建一个
新的Surface 对象,该对象表示实际显示的图形。Surface对象实现在显示器上画图
'''


ball = pygame.image.load("intro_ball.gif")
'''
加载我们的球图像。PyGames通过SDL_Image库支持多种图像格式,包括BMP、JPG、PNG、TGA和GIF。
'''
ballrect = ball.get_rect()
'''
pygame.image.load()函数返回一个带球数据的曲面。Surface将保留文件中的任何颜色键或alpha透明度。
加载球图像后,我们创建一个名为Ballrect的变量。PyGames附带了一个方便的实用程序对象类型,名为rect,表示矩形区域
'''

while 1:
    '''
    我们的程序已经初始化并准备运行。在无限循环中,我们检查用户的输入,移动球,然后画球
    。如果您熟悉GUI编程,那么您就有过事件和事件循环的经验。在玩偶游戏中,这没有什么不同,    
    '''
    for event in pygame.event.get():
        if event.type == pygame.QUIT: sys.exit()
        #我们检查一下退出事件已经发生了。如果是这样,我们可以退出程序,
    ballrect = ballrect.move(speed)
    #move (x,y)方向移动
    if ballrect.left < 0 or ballrect.right > width:
        speed[0] = -speed[0]
    if ballrect.top < 0 or ballrect.bottom > height:
        speed[1] = -speed[1]
    '''
    是时候更新我们的位置了。第17行到第21行以当前速度移动球拍变量。
    如果球在屏幕外移动,我们就向那个方向倒转速度。    
    '''
    time.sleep(0.005)
    screen.fill(black)
    '''
    我们通过填充黑色RGB颜色来擦除屏幕。如果您从未使用过动画,这可能看起来很奇怪。
    你可能会问:“为什么我们要擦除任何东西,为什么我们不直接移动屏幕上的球呢?”
    这并不完全是计算机动画的工作方式。动画只不过是一系列的单一图像,当按顺序显示时,
    就能很好地欺骗人的眼睛去看运动。屏幕只是用户看到的一个图像。如果我们不花时间把
    球从屏幕上擦除,我们就会看到球的“轨迹”,因为我们不断地在它的新位置上画球。可以试着注释掉 screen.fill(black)看看效果
    '''
    screen.blit(ball, ballrect)
    pygame.display.flip()
    '''
    我们需要做的最后一件事实际上是更新可见的显示。PyGames使用双缓冲区管理显示。当我们完成绘图时,
    我们调用pygame.display.flip()将完整显示面更新到屏幕上方法。这使得我们在屏幕表面绘制的所有内容
    都变得可见。这种缓冲确保我们只在屏幕上看到完全绘制的帧。
    这是对电子游戏的简短介绍。PyGames还有一些模块可以为键盘、鼠标和操纵杆进行输入处理。它可以混合音
    频和解码流媒体音乐。带着曲面您可以绘制简单的形状,旋转和缩放图片,甚至可以实时地像Numpy数组一样
    操作图像的像素。PyGames还可以充当PyOpenGL的跨平台显示层。大多数游戏模块都是用C编写的,
    很少是用Python编写的
    
    pygame网站为每个游戏功能提供了完整的参考文档,并为所有范围的用户提供了教程。这款游戏的来源有很多类似于
    猴子出拳和UFO射击的例子。
    
    “Python适合玩游戏吗?”答案是,“这取决于游戏。”

    Python实际上很有能力运行游戏。它甚至可能会让你惊讶于在30毫秒内有多大的可能。不过,一旦你的游戏开始变得更加复杂,
    就不难达到上限。任何实时运行的游戏都将充分利用计算机。
    
    在过去的几年里,游戏发展出现了一个有趣的趋势,即向更高层次的语言发展。通常一个游戏被分成两个主要部分。游戏引擎,
    这必须是尽可能快,和游戏逻辑,这使引擎实际上做了些什么。不久前,一个游戏的引擎是在程序集中编写的,部分是用C编写的。
    现在,C已经转移到了游戏引擎中,而游戏本身通常是用更高级的脚本语言编写的。像Quake3和Unreal这样的游戏以可移植代码的
    形式运行这些脚本。portable bytecode(可移植代码)看看这篇    https://yq.aliyun.com/articles/62690
    
    2001年初,developer Rebel Act工作室完成了他们的游戏,Severance:黑暗之刃。使用他们自己定制的3D引擎,游戏的其余部分都是
    用Python编写的。游戏是一个血腥的行动,第三人视角的拳击手。在探索地牢和城堡时,你可以控制中世纪战士进行复杂的斩首组合
    攻击。您可以下载这个游戏的第三方插件,并发现它们只不过是Python源文件。
    
    最近,Python已经被用于各种游戏,如Freedom Force(自由力量), 和 Humungous Backyard Sports (巨大后院运动)系列
    玩游戏是相当低的水平,当涉及到编写游戏。您很快就会发现自己需要将常见的功能打包到自己的游戏环境中。最棒的是,游戏里没有
    什么东西能阻挡你。你的程序完全控制着一切。这样做的副作用是,您会发现自己借用了大量代码来获得一个更高级的框架。你需要更
    好地理解你在做什么。
    
    开发游戏是非常有价值的,能够看到并与您编写的代码进行交互是一件令人兴奋的事情。派克目前有近30个其他项目使用它。他们中有几个已
    经准备好玩了。您可能会访问这个游戏网站,看看其他用户能够使用Python做些什么。

    吸引我注意的一件事是第一次使用Python来尝试游戏开发的人的数量。我明白为什么游戏会吸引新程序员,但这可能会很困难,因为创建游戏需
    要对语言有更深刻的理解。我试图通过为这些概念的新手编写许多示例和游戏教程来支持这一群用户。
    
    最后,我的建议是保持简单。我怎么强调都不为过。如果你计划创建你的第一个游戏,有很多需要学习的地方。即使是简单的游戏也会挑战你的设计,
    复杂的游戏不一定意味着有趣的游戏。当您理解Python时,您可以在一到两周内使用pyGames
    创建一个简单的游戏。从那里,你将需要一个惊人的时间雕琢细节,使之成为一个完整的游戏。
    引自https://www.pygame.org/docs/tut/PygameIntro.html
    '''

下一篇

猜你喜欢

转载自blog.csdn.net/weixin_39462002/article/details/84969693