详解pygame中Rect对象

目录
  • class pygame.Rect Rect
    • 对象的属性:
    • 方法
    • 剪切图片的应用

class pygame.Rect Rect

对象的属性:

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

注意:在 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(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 STUDY\images\me11.png')

2)矩形剪切图片

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

到此这篇关于详解pygame中Rect对象的文章就介绍到这了,更多相关pygame中Rect对象内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 面向对象学习之pygame坦克大战

    经过一天多的奋战,查阅文献,参考别人的代码等等,完成了第一个面向对象的小项目,也深深体会到面向对象编程思想在游戏编程中所扮演的角色. 附上代码,参考了别人的代码,以及对他们代码的完善,又加上了自己的一些东西,收获颇深. import pygame import sys import time from pygame.locals import * from random import randint MOVE_SLEEP = 0.01 class MyTank: width = 600 heig

  • Pygame Rect区域位置的使用(图文)

    Rect(rectangle)指的是矩形,或者长方形,在 Pygame 中我们使用 Rect() 方法来创建一个指定位置,大小的矩形区域.函数的语法格式如下: rect =pygame.Rect(left,top,width,height) Rect 表示的区域必须位于一个 Surface 对象之上,比如游戏的主窗口(screen).上述方法由四个关键参数值构成,分别是 left.top.width.height,为了方便大家理解这些距离的含义,下面给出了一张示意图: 注意:在 Pygame 中

  • pygame面向对象的飞行小鸟实现(Flappy bird)

    一些想法 自学python已经有快三个月了 最近这段时间没有怎么写过python 很多东西反而又遗忘了 准备翻以前的笔记复习一下在博客上记录下来 自己也没能够做出什么厉害的东西 小鸟游戏算是目前自己写的最好的一个代码了 基本游戏界面就是这样 分析需要的功能 我的构思是将游戏分成三个部分 初始游戏菜单界面 游戏进行界面 游戏结束界面 游戏里的角色和道具则使用类 小鸟类 管道类 因为是使用pygame模块 我对这个模块也很不熟悉 很多功能都是论坛参考其他大神的 比如 pygame.transform

  • 详解pygame中Rect对象

    目录 class pygame.Rect Rect 对象的属性: 方法 剪切图片的应用 class pygame.Rect Rect 对象的属性: Rect 表示的区域必须位于一个 Surface 对象之上,比如游戏的主窗口(screen).上述方法由四个关键参数值构成,分别是 left.top.width.height,为了方便大家理解这些距离的含义,下面给出了一张示意图: 注意:在 Pygame 中以游戏主窗口的左上角为坐标原点. 1.返回一个坐标数字 x,y top, left, bott

  • 详解 C# 中XML对象的序列化和反序列化

    这一篇主要是用来介绍关于C#中的XML序列化的问题,这个相信大家一定会经常使用它,特别是在WPF中,有时候我们需要将我们后台的数据保存在数据库中,从而在软件下一次启动的时候能够自动去加载这些数据,由于我们的这些Model中字段众多,如果单独进行保存那是不太现实的,这个时候将这些字段序列化成xml字符串并保存在数据库中就是一个不错的选择,当我们需要这些数据的时候我们也可以反过来将其序列化为一些字段,最终达到我们的效果,首先我们来看看是如何实现的? public class XMLUtil {   

  • 详解WPF中的对象资源

    在WPF中,所有继承自FrameworkElement的元素都包含一个Resources属性,这个属性就是我们这篇要讲的资源. 这一篇讲解的资源是不是上一篇的程序集资源(那个是在编译过程中打包到程序集中),这个是资源是我们想在公共的地方写一个对象让其他元素重复使用. 先贴个例子: <Window x:Class="NETResource.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/pre

  • 详解JS中的对象字面量

    前言 在 ES6 之前,js中的对象字面量(也称为对象初始化器)是非常基础的.可以定义两种类型的属性: 键值对{name1: value1} 获取器{ get name(){..} }和 设置器{ set name(val){..}}的计算属性值 var myObject = { myString: 'value 1', get myNumber() { return this._myNumber; }, set myNumber(value) { this._myNumber = Number

  • 详解JavaScript中Arguments对象用途

    目录 前言 Arguments 的基本概念 Arguments 的作用 获取实参和形参的个数 修改实参值 改变实参的个数 检测参数合法性 函数的参数个数不确定时,用于访问调用函数的实参值 遍历或访问实参的值 总结 在实际开发中,Arguments 对象非常有用.灵活使用 Arguments 对象,可以提升使用函数的灵活性,增强函数在抽象编程中的适应能力和纠错能力. JavaScript 中 Arguments 对象的用途总结. 前言 相信我们很多人在代码开发的过程中都使用到过一个特殊的对象 --

  • 详解Pandas中GroupBy对象的使用

    目录 使用 Groupby 三个步骤 将原始对象拆分为组 按组应用函数 Aggregation Transformation Filtration 整合结果 总结 今天,我们将探讨如何在 Python 的 Pandas 库中创建 GroupBy 对象以及该对象的工作原理.我们将详细了解分组过程的每个步骤,可以将哪些方法应用于 GroupBy 对象上,以及我们可以从中提取哪些有用信息 不要再观望了,一起学起来吧 使用 Groupby 三个步骤 首先我们要知道,任何 groupby 过程都涉及以下

  • 详解Android中Intent对象与Intent Filter过滤匹配过程

    如果对Intent不是特别了解,可以参见博文<详解Android中Intent的使用方法>,该文对本文要使用的action.category以及data都进行了详细介绍.如果想了解在开发中常见Intent的使用,可以参见<Android中Intent习惯用法>. 本文内容有点长,希望大家可以耐心读完. 本文在描述组件在manifest中注册的Intent Filter过滤器时,统一用intent-filter表示. 一.概述 我们知道,Intent是分两种的:显式Intent和隐式

  • 详解JavaScript中js对象与JSON格式字符串的相互转换

    首先我们来看一下js中JSON格式的字符串 var JSONStr1 = "{\"name\" : \"张三\"}"; 注意以下的写法不是js中JSON格式的字符串,它只是一个js的字符串. var JSONStr2 = "{'name' : '张三'}"; 我们看JSON语法中对于字符串的定义:是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义.一个字符(character)即一个单独的字符串(characte

  • 详解Django中Request对象的相关用法

    从Request对象中获取数据 我们在第三章讲述View的函数时已经介绍过HttpRequest对象了,但当时并没有讲太多. 让我们回忆下:每个view函数的第一个参数是一个HttpRequest对象,就像下面这个hello()函数: from django.http import HttpResponse def hello(request): return HttpResponse("Hello world") HttpRequest对象,比如上面代码里的request变量,会有一

  • 详解JS中Array对象扩展与String对象扩展

    废话不多说了,直接给大家上array对象扩展代码了,具体代码如下所示: /** * Created by laixiangran on 2016/01/07. * Array扩展 */ (function() { // 遍历数组 if (typeof Array.prototype.forEach != "function") { Array.prototype.forEach = function (fn, context) { for (var i = 0; i < this

随机推荐