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()