2019独角兽企业重金招聘Python工程师标准>>>

接着上次的继续。

简单的画图函数

Pygame给我们提供了几个简单的画图函数,比如画矩形,圆,椭圆,线,独立的像素点。

下面这个程序就实现了一些简单画图的操作

import pygame, sys
from pygame.locals import *pygame.init()DISPLAYSURF = pygame.display.set_mode((500,400),0,32)BLACK = (0, 0 , 0)
WHITE = (255, 255, 255)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)DISPLAYSURF.fill(WHITE)
pygame.draw.polygon(DISPLAYSURF, GREEN, ((146,0),(291,106),(236,277),(56,277),(0,106)))
pygame.draw.line(DISPLAYSURF, BLUE, (60, 60), (120,60), 4)
pygame.draw.line(DISPLAYSURF, BLUE, (20, 60), (60,20))
pygame.draw.line(DISPLAYSURF, BLUE, (60, 120), (120,120), 4)
pygame.draw.circle(DISPLAYSURF,BLUE, (300,50), 20, 0)
pygame.draw.ellipse(DISPLAYSURF,RED,(300,250,40,80),1)
pygame.draw.rect(DISPLAYSURF,RED,(200,150,100,50))pixObj = pygame.PixelArray(DISPLAYSURF)
pixObj[480][380] = BLACK
pixObj[482][382] = BLACK
pixObj[484][384] = BLACK
pixObj[486][386] = BLACK
pixObj[488][388] = BLACKdel pixObjwhile True:for event in pygame.event.get():if event.type == QUIT:pygame.quit()sys.exit()pygame.display.update()

执行后的效果如图

这里面有多一些新的Pygame的东西

fill(color)是Surface对象的一种方法,将surface对象的窗口全部填充一种颜色,就是背景色。

pygame.draw.polygon(surface, color, pointlist, width)画个多边形,其中surface和color参数告诉画在哪个对象里和使用的颜色,pointlist参数是由多个点构成的元组或列表,然后就会从第一个点开始,依次连接后面的点从而构成多边形,width参数是可选的,如果没有,则多边形会被color参数的颜色填充,如果有,而不会填充,多边形轮廓宽度就由width参数决定。传递0给width参数跟没有width参数是一样的。

需要注意的是,所有pygame.draw画图函数都有一个选择项参数width在最后,它们和pygame.draw,polygon函数中的width参数工作方式相同。

pygame.draw.line(surface, color, start_point, end_point, width) 画线函数

pygame.draw.lines(surface, color, closed, pointlist, width) 画多个相连的线,从起点到终点,与pygame.draw.polygon类似,唯一不同的是,如果closed参数为False,终点不会与起点相连接,传递True的话,终点会与起点想连接。

pygame.draw.circle(surface, color, center_point, radius, width) 画圆

pygame.draw.ellipse(surface, color, bounding_rectange, width) 画椭圆

pygame.draw.rect(surface, color, rectangle_tuple, width) 画矩形

pygame,PixelArray对象

pygame没有单独的画点函数。而方法就是创建pygame.PixelArray对象然后设置独立的像素点。创建一个关于Surface的PixelArray对象会‘锁住’Surface对象。一旦Surface对象被锁住,画图函数仍然可以使用,但是类似PNG或JPG的图片就不能作用在Surface对象上了,如果你想查看一个Surface对象是否锁住了,可以调用Surface对象get_locked()方法,如果锁住了会返回True,反之False。

设置这些独立像素点的方法是用两个索引值访问,比如pixObj[480][380] = BLACK ,这样就会将X坐标值的480和Y坐标的380这两个点设为黑色。

为了告诉pygame你完成了画完独立像素点,你需要通过一个del语句删除PixArray对象。删除PixArray对象会‘解锁’Surface对象,那样你就可以继续在上面加载图片了。如果忘了删除,则下次你想在Surface对象上加载图片的话就会报错。

pygame.display.update()函数

当你完成所有画图函数后,你必须调用pygame.display.update()函数让起显示在显示器上。

需要记住的一点是pygame.display.update()函数只会让显示对象(即通过调用pygame.display.set_mode()返回的对象)显示在屏幕上。如果你想让图片显示在屏幕上,你必须“blit”它们(复制它们的意思)到显示对象上通过blit()方法。

Animation

让图像动起来其实很简单,就是将图像从一个地方移动到另一个地方,就是清除掉图像原来所在地方的图像,然后在另一个地方加载这个图像,这样看上去图像就像动起来了一样。在计算机看来,其实就是一群像素的移动。下图就是一个例子

下面是一段示例代码

import pygame, sys
from pygame.locals import *pygame.init()FPS = 30 # frames per second setting
fpsClock = pygame.time.Clock()# set up the window
DISPLAYSURF = pygame.display.set_mode((400, 300), 0, 32)
pygame.display.set_caption('Animation')WHITE = (255, 255, 255)
catImg = pygame.image.load('cat.png')
catx = 10
caty = 10
direction = 'right'while True: # the main game loopDISPLAYSURF.fill(WHITE)if direction == 'right':catx += 5if catx == 280:direction = 'down'elif direction == 'down':caty += 5if caty == 220:direction = 'left'elif direction == 'left':catx -= 5if catx == 10:direction = 'up'elif direction == 'up':caty -= 5if caty == 10:direction = 'right'DISPLAYSURF.blit(catImg, (catx, caty))for event in pygame.event.get():if event.type == QUIT:pygame.quit()sys.exit()pygame.display.update()fpsClock.tick(FPS)

其中cat.png的下载地址PDF上面已经给出了。下载后必须与源文件放在一个文件夹里面。执行效果就是一只猫儿在一个窗口里面移动。先右,再下,再左,再上,如此循环。

上面这段代码里面又出现了一些新的东西。

帧率和pygame.time.Clock对象

帧率与刷新率指的是程序一秒钟能显示图片的数目,用FPS和帧每秒来表示。(在其它电脑显示器上,FPS有个大众名字叫做赫兹,许多显示器都有60赫兹的帧速率,或者叫做每秒60帧)低的帧率出现在一些图像游戏里就会导致游戏看起来是跳跃和抖动的,如果程序有太多的代码而经常刷新屏幕的话,就会导致FPS下降。但是在这本书里面的游戏因为足够简单所以即使在一些老的电脑上也不会出现问题。

pygame.time.Clock对象能够帮助我们确认程序能跑到的一个最大的确定的FPS值。Clock对象将在游戏主循环中插入小小的暂停以确保我们的游戏程序不会跑的太快。如果我们没有这些暂停的话,我们的游戏就会跑得跟电脑一样快。对玩游戏的人来说它确实太快了。在游戏循环中调用Clock对象的tick()方法能保证我们的游戏跑到一个确定的速度不管电脑跑得有多么快。创建Clock对象如下语句

fpsClock = pygame.time.Clock()

tick方法应该在游戏循环的最末尾调用,也就是在pygame.display.update之后,调用语句如下

fpsClock.tick(FPS)

转载于:https://my.oschina.net/u/1587304/blog/399948

Make Games with Python Pygame (2)相关推荐

  1. python+pyGame 黑白棋游戏

    注:以下程序为根据相应的字符界面程序改编而来,写的不好,若有好的建议,望留言告知.而若能帮助一二访客,幸甚! 继续学习python. 为了学习起来更有趣,继续以游戏的方式来学习. 注:前几天学习了In ...

  2. Python pygame 坦克大战

    Python pygame 坦克大战 import pygame, time, random from pygame.sprite import SpriteSCREEN_WIDTH = 750 SC ...

  3. PYTHON pygame库实战——实现双人弹球小游戏

    PYTHON pygame实战--运用pygame库实现双人弹球小游戏 使用python pygame库实现一个双人弹球小游戏,两人分别控制一个左右移动的挡板用来拦截小球,小球会在两板间不停弹跳,拦截 ...

  4. python pygame 简单小游戏

    python pygame 简单小游戏 最近学习了pygame,感觉十分有意思,花了一点时间制作了一个简单的小游戏 效果图 这是一个很简单的防守类小游戏 玩家可以使用wasd控制人物移动,并且鼠标控制 ...

  5. 保姆级教学——Python+Pygame怎么实现吃豆豆游戏

    耽搁十几天的时间,我顺利的从阳转阴啦, 以后的日子一切恢复正常,好好工作,积极分享.希望在座的小伙伴阳了的全部健康转阴,没阳的全部不会变阳,新的一年,一切顺顺利利. 不知道最近大家学习得怎么样?有没有 ...

  6. 小甲鱼python游戏代码_【小甲鱼】零基础学习python pygame 飞机大战可执行源代码...

    [实例简介] [小甲鱼]零基础学习python pygame 飞机大战可执行源代码,觉得挺有意思,故此分享. [实例截图] [核心代码] 飞机大战 └── 飞机大战 ├── bullet.py ├── ...

  7. python +pygame 制作五子连珠小游戏

    python +pygame 制作五子连珠小游戏 学习python半年了,今天分享一个利用pygame制作的五子连珠游戏. 一.代码: 1.球类,ball.py """ ...

  8. python pygame实战《飞船大战外星人》

    学了一个月的python,最后两天学了下pygame,以一个小游戏结尾这段旅程. 游戏规则如下: 玩家可以通过上下左右四个键控制飞船移动,而且按住键不放可以联系移动,而不需要不断地按键松键来控制. 玩 ...

  9. Python+pyGame 打砖块游戏

    注:以下程序为本人原创,写的不好,若有好的建议,望留言告知.而若能帮助一二访客,幸甚! 最近搞"科研"搞的蛋都碎了... 思吾之理想是将计算机玩弄于股掌之上(将计算机组成原理.操作 ...

最新文章

  1. Java中的关于static的解释和应用
  2. 使用Java进行查询hugegraph_HugeGraph Examples
  3. java httpclient put_[工具类-HttpClientUtils]HttpClient之GET PUT DELETE POST
  4. boost::packaged_task相关的测试程序
  5. 基于Xml 的IOC 容器-分配路径处理策略
  6. 【C# interface接口】模拟MP3/AVI播放器
  7. 现在的男生真的太惨了
  8. php中sisson用法,thinkPHP中session()方法用法详解
  9. 2016物联网大趋势搞不懂?别担心,CES为你指点迷津
  10. 01 - 雷达回波中的可用信息
  11. 中国各省GDP数据集(1949年-2020年)
  12. UTF和uncode
  13. UITT 自动跟单系统
  14. 华为防火墙ftp_华为防火墙如何配置ftp服务器映射到外网
  15. 数据结构:求两个有序列表的交集,并集
  16. 初学ARM的个人心得
  17. QA:MEID号申请、什么是MEID号、怎么申请MEID号、MEID号获取
  18. Foundations of Machine Learning———PAC
  19. Mapbox GL JS 支持 中文标注
  20. BGP实验 (IBGP,EBGP) neighbor

热门文章

  1. linux文件常用权限,常用的更改Linux系统文件权限的命令
  2. python机器学习及实践_Python机器学习及实践
  3. Google Hack 搜索使用
  4. halcon的算子清点: Chapter 1 分类
  5. java面试题oracle,2021年度javasqloracle面试题汇总.doc
  6. 连云港职业技术学院有计算机系吗,连云港职业技术学院电子信息工程技术专业...
  7. mybatis学习7之动态sql
  8. C语言实验——矩阵转置_JAVA
  9. Effective C++ -- 零散知识点整理
  10. Halcon 记录1