资讯专栏INFORMATION COLUMN

pygame中Rect对象介绍案例解答

89542767 / 830人阅读


  小编写此篇文章的目的,主要是给大家来做一个解答,解答关于pygame中Rect对象的相关内容知识,下面就给大家做一个比较详细的解答。


  class pygame.Rect Rect


  对象的属性:


  Rect表示的区域必须位于一个Surface对象之上,比如游戏的主窗口(screen)。上述方法由四个关键参数值构成,分别是left、top、width、height,为了方便大家理解这些距离的含义,下面给出了一张示意图:

0.png

  注意:在Pygame中以游戏主窗口的左上角为坐标原点。


  1.返回一个坐标数字


   x,y
  top,left,bottom,right
  centerx,centerysize
  width,height
  w,h;


  2.返回一个(X,Y)坐标数组


   topleft(左上)
  bottomleft(左下)
  bottomright(右下)
  midtop(中上)
  midleft(左中)
  midbottom(底中)
  midright(右中)
  center(中心点坐标)


  方法


  Rect是用于存储矩形坐标的Pygame对象。


  Rect(left,top,width,height)->Rect
  Rect((left,top),(width,height))->Rect
  Rect(object)->Rect


  方法


  Rect是用于存储矩形坐标的Pygame对象。


  Rect(left,top,width,height)->Rect
  Rect((left,top),(width,height))->Rect
  Rect(object)->Rect

  Rect(rectangle)指的是矩形,或者长方形,在Pygame中我们使用Rect()方法来创建一个指定位置,大小的矩形区域。


  Rect(矩形区域)对象提供了一些方法。如下表所示:


  方法                                说明                                                                             返回值


  pygame.Rect.copy()—拷贝Rect对象,返回与原始矩形具有相同位置和大小的新矩形。Rect对象


  pygame.Rect.move()—移动Rect对象,返回按给定偏移量移动后的新矩形。x和y参数可以是任何整数值,正数或负数。Rect对象


  pygame.Rect.move_ip()—原地移动Rect对象,与Rect.move()方法相同,但仅操作无返回副本。None


  pygame.Rect.inflate()—放大和缩小Rect对象的尺寸,返回一个新矩形,其大小由给定的偏移量更改。矩形仍围绕其当前中心。负值将缩小矩形。Rect对象


  pygame.Rect.inflate_ip()—原地放大和缩小Rect对象的尺寸,与Rect.inflate()方法相同,但仅操作无返回副本。None


  pygame.Rect.clamp()—将一个Rect对象移动到另一个Rect对象的中心,返回一个新的矩形,该矩形被移动到参数Rect内。如果矩形太大而不能放在内部,它将在参数Rect内居中,但其大小不会更改。Rect对象


  pygame.Rect.clamp_ip()—原地将一个Rect对象移动到另一个Rect对象的中心None


  pygame.Rect.clip()—获取两个Rect对象互相重叠的部分,返回一个新矩形,该矩形被裁剪为完全位于参数矩形内。如果两个矩形开始时没有重叠,则返回一个0大小的矩形。Rect对象


  pygame.Rect.union()—将两个Rect对象合并,返回完全覆盖两个提供的矩形区域的新矩形。新矩形内可能有原始矩形未覆盖的区域。Rect对象


  pygame.Rect.union_ip()—原地将两个Rect对象合并,与Rect.union()方法相同,但仅操作无返回副本。None


  pygame.Rect.unionall()—将多个Rect对象合并Rect对象


  pygame.Rect.unionall_ip()—原地将多个Rect对象合并None


  pygame.Rect.fit()—按照一定的宽高比调整Rect对象,返回一个新矩形,该矩形被移动并调整大小以适应另一个矩形。保留原始矩形的纵横比,因此新矩形的宽度或高度可能小于目标矩形。Rect对象


  pygame.Rect.normalize()—翻转Rect对象(如果尺寸为负数),如果矩形的宽度或高度为负,则此操作将翻转矩形的宽度或高度。矩形将保持在同一位置,只交换边。None


  pygame.Rect.contains()—检测一个Rect对象是否完全包含在该Rect对象内,contains(Rect)->bool当参数完全在Rect内时返回true。bool


  pygame.Rect.collidepoint()—检测一个点是否包含在该Rect对象内,如果给定点位于矩形内,则返回true。沿右边缘或下边缘的点不被视为位于矩形内。注意:对于矩形和直线之间的碰撞检测,可以使用clipline()方法。bool


  pygame.Rect.colliderect()—检测两个Rect对象是否重叠,如果矩形的任何部分重叠(除了顶部+底部或左侧+右侧边缘),则返回true。注意:对于矩形和直线之间的碰撞检测,可以使用clipline()方法。bool


  pygame.Rect.collidelist()—检测该Rect对象是否与列表中的任何一个矩形有交集,测试矩形是否与一系列矩形中的任何矩形碰撞。返回找到的第一个冲突的索引。如果未找到冲突,则返回索引-1。bool


  pygame.Rect.collidelistall()—检测该Rect对象与列表中的每个矩形是否有交集,返回包含与矩形冲突的矩形的所有索引的列表。如果未找到相交矩形,则返回空列表。bool


  pygame.Rect.collidedict()—检测该Rect对象是否与字典中的任何一个矩形有交集bool


  pygame.Rect.collidedictall()—检测该Rect对象与字典中的每个矩形是否有交集[(key,value),…]


  下面看一组简单的示例演示,如下所示:


  import pygame
  #对应left/top/width/height
  rect1=pygame.Rect(0,0,100,100)
  print('x的值是{};y的值是{}'.format(rect1.x,rect1.y))
  print('bottom的值是{};right的值是{}'.format(rect1.bottom,rect1.right))
  #设置居中的距离
  print(rect1.center,rect1.centerx,rect1.centery)
  #返回值为(centerx,top)
  print(rect1.midtop)
  #返回值为(right,centery)的元组
  print(rect1.midright)
  #返回值为(left,bottom)
  print(rect1.bottomleft)
  #返回矩形区域大小,元组格式
  print(rect1.size)
  输出结果如下:
  x的值是0;y的值是0
  bottom的值是100;right的值是100
  #设置中心努力
  (50,50)50 50
  (50,0)
  #midright
  (100,50)
  #bottomleft
  (0,100)
  #size
  (100,100)

  我们还可以通过属性对来设置,或者者更改矩形区域的大小,如下所示:


   rect1.left=30
  rect1.center=(70,70)

  除了通过Rect对象来构造一个矩形区域之外,我们还可以使用rect属性来构建一个矩形区域。在Pygame中有许多函数都提供了rect属性,比如有下列函数:


  surface.fill((0,0,255),rect=(100,100,100,50))


  上述代码会在surface对象的区域内选定一个rect区域,并将该区域填充为蓝色(RGB(0,0,255))。


  示例:


  import pygame
  import sys
  pygame.init()
  size=width,height=300,300
  bg=(255,255,255)#RGB白色
  #创建指定大小的窗口Surface
  screen=pygame.display.set_mode(size)
  #设置窗口标题
  pygame.display.set_caption("Python Demo")
  clock=pygame.time.Clock()
  rect1=pygame.Rect(0,0,100,50)
  rect2=pygame.Rect(50,50,200,200)
  while True:
  for event in pygame.event.get():
  if event.type==pygame.QUIT:
  pygame.quit()
  sys.exit()
  screen.fill(bg)
  pygame.draw.rect(screen,(255,0,0),rect1)
  pygame.draw.rect(screen,(0,255,0),rect2)
  pygame.draw.rect(screen,(0,0,255),rect1.fit(rect2))
  pygame.display.flip()
  clock.tick(10)

  剪切图片的应用


  1)加载图片shoot_img=pygame.image.load(r'F:Python STUDYimagesme11.png')


  2)矩形剪切图片


   hero1_rect=pygame.Rect(0,0,136,168)
  hero2=shoot1_img.subsurface(hero1_rect)


  综上所述,pygame中rect对象就为大家介绍到这里了,希望可以为各位读者带来帮助。


文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/127744.html

相关文章

  • Python pygame如何实现拼图游戏?下文给大家解答

      Python pygame作为一门常见的技能,其实,它的应用范围还是比较的广泛的,那么,它是怎么实现其拼图游戏呢?下面就以案例的形式,去给大家做个解答,下面就给大家详细解答下。  pygame介绍  Python Pygame是一款专门为开发和设计2D电子游戏而生的软件包,它支Windows、Linux、Mac OS等操作系统,具有良好的跨平台性。Pygame由Pete Shinners于20...

    89542767 评论0 收藏0
  • 教你使用Python的pygame模块实现拼图游戏

      pygame模块是一个可以跨平台的模块,主要就是作为游戏开发来进行使用的,那么,怎么才能够实现其游戏开发的技能了?比如说,怎么实现使用pygame去实现拼图的游戏呢?下面就给大家详细解答下。  pygame介绍  Python Pygame是一款专门为开发和设计2D电子游戏而生的软件包,它支Windows、Linux、Mac OS等操作系统,具有良好的跨平台性。Pygame由Pete Shin...

    89542767 评论0 收藏0
  • Python+Pygame怎么实现吃豆豆游戏?

      小编写这篇文章的一个主要目的,主要是用来给大家去做个相关的介绍,介绍的内容主要是涉及到相关的游戏实现,比如怎么去做游戏呢?比如说,怎么去做打豆豆的游戏呢?关于这方面的内容,下面就给大家详细解答下。  序言  前天晚上,玩起了在我们的学生时代经常玩的一些游戏,吃豆豆,但是我发现,在一局游戏当中,我们命的条数是比较少的,我根本不能吃完所有的豆豆,总是被敌人吃掉  于是,我在想怎么能够保证我达到吃完...

    89542767 评论0 收藏0
  • Python学习之路11-武装飞船

    摘要:和标志,用于表示飞船是否正在移动,用于实现飞船在不松开按键下连续移动。重写了函数,用于绘制飞船模块该模块主要是集中处理游戏中发生的各种事件。函数用于监听游戏的事件,比如,它表示游戏推出事件和分别表示键盘按下与松开事件。 《Python编程:从入门到实践》笔记。本章主要学习如何使用pygame编写一个简单的小飞机打外星人的游戏,由于本人对用python写游戏并不是特别感兴趣,所以主要是看...

    李昌杰 评论0 收藏0
  • Pygame精准检测图象撞击问题

      此篇文章主要是阐述了Pygame精准检测图象撞击,在使用Pygame写游戏时,有些人可能遇到2个Rect目标撞击可是目标中间也有室内空间间距问题,这儿,将教给大家用一个方法准确地检验图象撞击,需用的小伙伴可以借鉴一下。  在使用Pygame写游戏时,有些人可能遇到2个Rect目标撞击可是目标中间也有室内空间间距问题,这儿,将教给大家用一个方法准确地检验图象撞击。  假定大家主要有两种图象(为非...

    89542767 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<