- Pygame 教程
- Pygame - 首页
- Pygame - 概述
- Pygame - Hello World
- Pygame - 显示模式
- Pygame - Locals 模块
- Pygame - 颜色对象
- Pygame - 事件对象
- Pygame - 键盘事件
- Pygame - 鼠标事件
- Pygame - 绘制形状
- Pygame - 加载图像
- Pygame - 在窗口中显示文本
- Pygame - 移动图像
- Pygame - 使用数字小键盘移动
- Pygame - 使用鼠标移动
- Pygame - 移动矩形物体
- Pygame - 使用文本作为按钮
- Pygame - 变换图像
- Pygame - 音效对象
- Pygame - 混音通道
- Pygame - 播放音乐
- Pygame - 播放视频
- Pygame - 使用摄像头模块
- Pygame - 加载光标
- Pygame - 访问 CDROM
- Pygame - Sprite 模块
- Pygame - PyOpenGL
- Pygame - 错误和异常
- Pygame 有用资源
- Pygame - 快速指南
- Pygame - 有用资源
- Pygame - 讨论
Pygame - 移动矩形物体
Pygame.Rect 类具有存储和操作矩形区域的功能。可以使用左、上、宽和高值构造 Rect 对象。Rect 类中的函数可以复制、移动和调整 Rect 对象的大小。
Rect 对象具有以下虚拟属性:
除了移动之外,Rect 类还具有测试矩形之间碰撞的方法。
copy() | 返回一个与原始矩形具有相同位置和大小的新矩形。 |
move() | 返回一个通过给定偏移量移动的新矩形。x 和 y 参数可以是任何整数,正数或负数。 |
move_ip() | 与 Rect.move() 方法相同,但就地操作。 |
inflate(x,y) | 返回一个大小根据给定偏移量改变的新矩形。负值将缩小矩形。 |
inflate_ip(x, y) | 与 Rect.inflate() 方法相同,但就地操作。 |
clamp(Rect) | 返回一个移动到完全位于参数 Rect 内的新矩形。 |
clip(Rect) | 返回一个裁剪到完全位于参数 Rect 内的新矩形。 |
union(Rect) | 返回一个完全覆盖两个提供的矩形区域的新矩形。 |
union_ip(Rect) | 与 Rect.union() 方法相同,但就地操作。 |
contains(Rect) | 当参数完全位于 Rect 内时返回 true。 |
collidepoint((x,y)) | 如果给定点位于矩形内,则返回 true。 |
colliderect(Rect) | 如果两个矩形的任何部分重叠,则返回 true。 |
示例
在下面的程序中,用红色轮廓绘制一个 Rect 对象。使用 copy() 方法创建其克隆以进行移动。移动由 move_ip() 方法实现。箭头键通过将 x/y 坐标递增/递减 + 或 -5 像素来移动复制矩形的位置。
import pygame from pygame.locals import * from sys import exit pygame.init() screen = pygame.display.set_mode((400,300)) rect1 = Rect(50, 60, 200, 80) rect2=rect1.copy() running = True x=0 y=0 while running: for event in pygame.event.get(): if event.type == QUIT: running = False if event.type == KEYDOWN: if event.key==K_LEFT: x= -5 y=0 if event.key == K_RIGHT: x=5 y=0 if event.key == K_UP: x = 0 y = -5 if event.key == K_DOWN: x = 0 y = 5 rect2.move_ip(x,y) screen.fill((127,127,127)) pygame.draw.rect(screen, (255,0,0), rect1, 1) pygame.draw.rect(screen, (0,0,255), rect2, 5) pygame.display.update() pygame.quit()
输出
下面的输出显示带有红色轮廓的矩形是原始矩形。它的副本不断移动以响应箭头键,并具有蓝色轮廓。
示例
将 move_ip() 方法更改为 inflate_ip() 方法,以根据按下的箭头键来增大/缩小矩形。
while running: for event in pygame.event.get(): if event.type == QUIT: running = False if event.type == KEYDOWN: if event.key==K_LEFT: x= -5 y=0 if event.key == K_RIGHT: x=5 y=0 if event.key == K_UP: x = 0 y = -5 if event.key == K_DOWN: x = 0 y = 5 rect2.inflate_ip(x,y) screen.fill((127,127,127)) pygame.draw.rect(screen, (255,0,0), rect1, 1) pygame.draw.rect(screen, (0,0,255), rect2, 5) pygame.display.update()
输出
以下是箭头键按下活动的屏幕截图:
示例
为了通过检测 MOUSEMOTION 事件来移动矩形,我们需要首先按下原始矩形内的鼠标。为了验证鼠标位置是否在矩形内,我们使用 Rect 对象的 collidepoint() 方法。当鼠标移动时,矩形对象通过 move_ip() 方法就地移动。当鼠标释放时,移动将停止。
import pygame from pygame.locals import * from sys import exit pygame.init() screen = pygame.display.set_mode((400,300)) rect = Rect(50, 60, 200, 80) moving = False running = True while running: for event in pygame.event.get(): if event.type == QUIT: running = False elif event.type == MOUSEBUTTONDOWN: if rect.collidepoint(event.pos): moving = True elif event.type == MOUSEBUTTONUP: moving = False elif event.type == MOUSEMOTION and moving: rect.move_ip(event.rel) screen.fill((127,127,127)) pygame.draw.rect(screen, (255,0,0), rect) if moving: pygame.draw.rect(screen, (0,0,255), rect, 4) pygame.display.flip() pygame.quit()
输出
示例
要通过鼠标绘制矩形,请在 MOUSEBUTTONDOWN 和 MOUSEBUTTONUP 事件中捕获鼠标指针坐标,计算左上角坐标、宽度和高度,然后调用 rect() 函数。
import pygame from pygame.locals import * from sys import exit pygame.init() screen = pygame.display.set_mode((400,300)) pygame.display.set_caption("Draw Rectangle with Mouse") screen.fill((127,127,127)) x=0 y=0 w=0 h=0 drawmode=True running = True while running: for event in pygame.event.get(): if event.type == QUIT: running = False if event.type == MOUSEBUTTONDOWN: x,y = pygame.mouse.get_pos() drawmode = True if event.type == MOUSEBUTTONUP: x1,y1 = pygame.mouse.get_pos() w=x1-x h=y1-y drawmode= False rect = pygame.Rect(x,y,w,h) if drawmode == False: pygame.draw.rect(screen, (255,0,0), rect) pygame.display.flip() pygame.quit()
输出
广告