一、相关方法知识
pygame.mouse.get_pos()
:获取鼠标光标的位置,X坐标和Y坐标
该位置相对于显示屏的左上角。光标位置可以位于显示窗口之外,但始终限制在屏幕上。pygame.draw.rect()
:画一个矩形
rect(surface,color,rect,width = 0)
surface:在此屏幕上绘制
color:要绘制的颜色,如果使用元组,则alpha值是可选的(RGB[A])
rect:要绘制的矩形,位置和尺寸(这个矩形具有:left,top,width,height)
width:用于线条粗细或表示要填充矩形(不要与rect参数的宽度值混淆)
返回:
一个矩形边界变化的像素,如果没有绘制任何东西,边界矩形的位置将是给定rect 参数的位置,其宽度和高度将为0
blit()
:将一个图像绘制到另一个
blit(source,dest)
source:在此Surface上绘制源Surface。
dest:参数定位绘图。
Dest可以是表示源左上角的坐标对。
Rect也可以作为目标传递,矩形的topleft角将用作blit的位置。
如果 dest 是一个位置矩形的话,就将其放置在其中心处
position = dog.get_rect()
# 为了控制将初始图像放置在screen的中心处
position.center = width //2,height //2 #整除获得图像中心位置
screen.blit(dog,position) # 更新图像
二、示例
import pygame
import sys
from pygame.locals import *
pygame.init()
size = width,height = 600,400
bg = (255,255,255)
screen = pygame.display.set_mode(size)
pygame.display.set_caption("初次见面,请大家多多关照")
dog = pygame.image.load("dog.png")
# 使用 select 判断选择框状态,drag 判断拖拽的状态
# 0->未选择,1->选择中,2->完成选择
select = 0
# 0->未拖拽,1->拖拽中,2->完成拖拽
drag = 0
# Rect 用于存储直角坐标的pygame对象
# Rect(左,顶,宽,高) 这些属性可以控制一个矩形的位置,大小
select_rect = pygame.Rect(0,0,0,0)
# 获得图像的位置矩形
position = dog.get_rect()
# 为了控制将初始图像放置在screen的中心处
position.center = width //2,height //2 # 整除获得图像中心位置
# 设置为死循环,确保窗口一直显示
while True:
# 遍历所有的事件
for event in pygame.event.get():
# 如果单击关闭窗口,则退出
if event.type == pygame.QUIT:
sys.exit()
# 如果发生鼠标按下事件
elif event.type == MOUSEBUTTONDOWN:
# 鼠标摁下的两个属性,button(1:鼠标摁下)和pos(鼠标点击的坐标)
if event.button == 1:
# 第一次点击,选择范围
if select == 0 and drag == 0:
pos_start = event.pos
select = 1
# 第二次点击,拖拽图像
elif select ==2 and drag == 0:
# subsurface 创建一个引用其父级的新表面
# copy 方法,返回与原始位置和大小相同的新矩形
capture = screen.subsurface(select_rect).copy()
cap_rect = capture.get_rect()
drag = 1
# 第三次点击,初始化
elif select == 2 and drag == 2:
select =0
drag = 0
elif event.type == MOUSEBUTTONUP:
# button = 1 代表松开鼠标
if event.button == 1:
# 第一次释放,结束选择
if select == 1 and drag ==0:
# 记录释放点的坐标
pos_stop = event.pos
select = 2
if select == 2 and drag == 1:
drag = 2
# 填充背景
screen.fill(bg)
# 更新图像
screen.blit(dog,position)
# 实时绘制选择框
if select:
#pygame.mouse.get_pos():返回鼠标光标的位置X和Y位置。该位置相对于显示屏的左上角。
mouse_pos = pygame.mouse.get_pos()
if select == 1:
pos_stop = mouse_pos
# 选择框的 left 和 top 通过起始鼠标点击处确定选择框的位置
select_rect.left,select_rect.top = pos_start
# 确定选择框的宽和高
select_rect.width,select_rect.height = pos_stop[0] - pos_start[0],pos_stop[1] - pos_start[1]
# 画一个矩形
pygame.draw.rect(screen,(0,0,0),select_rect,1)
# 拖拽裁剪图像
if drag:
if drag == 1:
cap_rect.center = mouse_pos
screen.blit(capture,cap_rect)
# 更新界面
pygame.display.flip()
结果图: