pygame入门(4)

Rect对象

负责支持Rect对象的模块是pygame.Rect,这是一个相对独立于其他模块的小模块,但也是Pygame中的一个常用功能,Rect对象可以使许多工作变得更加简单

Rect对象定义

Rect对象是指用类的形式表示的一个矩形区域,它具有一系列属性和方法可供使用。

Rect对象大概就是一个矩形区域,总共四个参数:左上角坐标(left,top),宽度width,高度height

创建Rect对象

Rect(left,top,width,height)

该函数返回的是一个Rect对象,即利用Rect类的构造函数创建一个Rect类的实例

除了主动调用构造函数创建外,还可以用另一种更常用的方法

surface.get_rect()
#适合获取一个Surfac相关的Rect对象

Rect对象大多数时候是作为其他模块中的函数的参数使用的,如:pygame.Surface.blit()

Rect对象的属性

  • x:左上角x坐标

  • y:左上角y坐标

  • w:宽度

  • h:高度

  • size:矩形尺寸,二元组(width,height)

  • top:左上角x坐标,等同于x

  • left:左上角y坐标,等同于y

  • bottom:右下角y坐标

  • right:右下角x坐标

  • centerx:中心点x坐标

  • centery:中心点y坐标

  • center:中心点坐标(cneterx,centery)二元组

  • topleft:左上角坐标(x,y)or(left,top)二元组

  • bottomleft:右下角坐标(left,bottom)二元组

  • topright:右上角坐标(right,top)二元组

  • bottomright:右下角坐标(right,bottom)二元组

  • midtop:上边缘中心点坐标(centerx,top)二元组

  • midleft:左边缘中心点坐标,(left,centery)二元组

  • midbottom:下边缘中心点坐标(centerx,bottom)二元组

  • midright:右边缘中心点坐标(right,centery)二元组

以上属性都可以自由赋值,但是必须是整数或整数对

常用方法

move(x,y)

根据指定偏移量移动矩形,x为正则向右移动,如果为负,则表示想左移动

y为正则高度增加,负则高度减少,单位位像素,且必须为整数该方法会返回一个移动后的Rect对象,对原始Rect对象不做修改。

move_ip(x,y)

功能和move()方法相似,只不过其返回值为None,对矩形的修改将体现到原始Rect对象上。后缀ip代表in place 即原地操作

inflate(x,y)
#对原始Rect对象不做修改,有返回值
inflate_ip(x,y)

根据指定的偏移量缩放矩形。参数x是x方向上的偏移量,如果为正,则表示宽度增加;如果为负,则表示宽度减少。y同上,缩放时中心点保持不变,该方法可以返回一个缩放后的Rect对象,对原始Rect对象做修改,无返回值

contains(Rect)

检测调用者Rect对象的矩形区域是否完全包含参数Rect对象的矩形区域。如果完全包含就返回True,否则返回Fales.参数Rect可以是Rect对象也可以是(left,top,width,height)四元组。如同前面提及的其他函数一样,在pygame中,凡是接受 Rect矩形区域作为参数的函数都可以用这种方式传递参数

collidepoint(x,y)
#检测点(x,y)是否在调用者Rect对象的矩形区域内,如果是,则返回True;如果否,
#则返回False,注意:Rect对象的有右边缘和下边缘一般不属于矩形区域,因此如果该点
#刚好位于右、下边缘则返回的依然是False.\
#该方法也可以接受(x,y)二元组作为参数:collidepoint((x,y)
colliderenct(Rect)
colliderect(Rect)
#检查调用者Rect对象的矩形区域与参数Rect对象的矩形区域是否重叠。如果是,则True
#否就False
collidelist(p_list)
#检测调用者的Rect对象是否与参数列表中的Rect对象的矩形区域重叠
#参数p_list为多个Rect对象的列表,该函数返回第一个发生重叠的Rect对象在p_list列表
#中的index,如果没有则返回-1
collidelistall(p_list)
#返回p_list中所有发生重叠的对象的index组成的列表,而不是第一个发生重叠的对象,
#无则返回一个空列表

实例

import sys
import pygame
def main():
    pygame.init()
    #游戏时钟
    clock=pygame.time.Clock()
    #游戏窗口
    screen=pygame.display.set_mode((500,300))
    #标题
    pygame.display.set_caption("Rect test")
    #创建Rect对象
    rect0=(100,0,300,50)
    rect1=pygame.Rect(100,60,300,160)
    #偏移Rect对象 不改变原来对象 有返回值为:Rect
    rect2=rect1.inflate(-40,-40)
    #检查该点是不是在Rect对象里面
    print(rect1.collidepoint((220,100)))
    #检查Rect对象是否重叠
    print(rect1.colliderect(rect0))
    #检查列表内是否重叠,返回第一个重叠的index
    print(rect1.collidelist([rect0,rect2]))
    #先加载图片 然后把图片带透明度转化为screen的格式
    #图片素材自己找 但是得是小一点的图片才能看出效果
    dog=pygame.image.load("images/dog.png").convert_alpha()
    #懒得找这里用了小飞机图片
    rect3=dog.get_rect()
    #中心坐标点
    rect3.center=40,260
    speed=1
    while True:
        for event in pygame.event.get():
            if event.type==pygame.QUIT:
                pygame.quit()
                sys.exit()
        #填充颜色
        screen.fill((255,255,255))
        #画矩形 rect(Surface,color,Rect,width=0)
        #小黄块
        pygame.draw.rect(screen,(255,193,37),rect0)
        #小红块
        pygame.draw.rect(screen,(255,0,0),rect1)
        #小银块
        pygame.draw.rect(screen,(230,230,230),rect2)
        #移动 对原始对象做修改
        rect3.move_ip(speed,0)
​
        if not screen.get_rect().contains(rect3):
            speed=-speed
        screen.blit(dog,rect3)
        #刷新频率 通过上面的游戏时钟类实现的
        pygame.display.flip()
        clock.tick(60)
if __name__=="__main__":
    main()

 

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值