第三节 pygame中的图像
一、加载图片
格式:变量名=pygame.image.load("图片名称.图片格式")
图片名称需要用字符串的形式,而且需要带上图片的格式
二、缩放图片
格式:变量名=pygame.transform.scale(缩放对象,(宽度,高度))
参数宽度和高度表示缩放后的宽度和高度,需要用括号括起来
这里的缩放对象是指通过pygame.image.load()方法加载过图片的对象
三、绘制图片
格式:画布名称.blit(绘制对象,(坐标x,坐标y))
注意:坐标需要用括号括起来
绘制图片语句要放在程序主循环pygame.display.update()之前
绘制多张图片时,先绘制的对象在下面,后绘制的对象在上面。如果坐标重合,后绘制的对象遮挡先绘制的对象
四、rgb三原色
RGB颜色结构:
(num1,num2,num3)
num1是0-255的整数,代表R(red-红色),数字越大,颜色中红色成分越多
num2是0-255的整数,代表G(green-绿色),数字越大,颜色中绿色成分越多
num3是0-255的整数,代表B(blue-蓝色),数字越大,颜色中蓝色成分越多
五、图像拖拽
步骤:
鼠标动作 | 图形动作 | 矩形动作 |
---|---|---|
1、鼠标按下 | 选中图形 | 选中图形对应的矩形对象 |
2、鼠标移动 | 移动图形 | 将矩形对象的坐标设置为鼠标坐标 |
3、鼠标松开 | 固定图形 | 取消选中图形的矩形对象 |
1、矩形和点的碰撞检测
格式:矩形.collidepoint(点的坐标)
例如:判断矩形rect1和点(520,233)是否碰撞:
if rect1.collidepoint(520,233):
print("矩形和点碰到了")
2、获取鼠标点位置
获取鼠标的坐标:event.pos
获取鼠标的x坐标:event.pos[0]
获取鼠标的y坐标:event.pos[1]
3、MOUSEMOTION事件
检测鼠标移动:
event.type == pygame.MOUSEMOTION
鼠标事件通常作为if条件语句中的条件。
4、MOUSEMOTION事件的使用方法
#导库
import pygame,sys
......
while True:
for event in pygame.event.get(): #循环检测
if event.type == pygame.KEYDOWN: #退出事件判断
print("这是键盘事件")
elif event.type == pygame.MOUSEBUTTONDOWN: #检测鼠标按下
print("这是鼠标事件") #执行语句
elif event.type == pygame.MOUSEMOTION: #检测鼠标移动
print("鼠标移动了") #执行语句
5、选中图形跟随鼠标移动
moveRect = None # 移动的对象
while True:
for event in pygame.event.get():
#退出事件
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
#鼠标事件
elif event.type == pygame.MOUSEBUTTONDOWN:
for n in rectList:
if n.collidepoint(event.pos):
# print(event.pos)
moveRect = n #设置变量为选中图形
elif event.type == pygame.MOUSEMOTION:
if moveRect != None:
moveRect.center = event.pos #设置选中图形跟随鼠标位置
6、固定图形-MOUSEBUTTONUP事件
检测鼠标按键按下:
event.type == pygame.MOUSEBUTTONUP
鼠标事件通常通常作为if条件语句中的条件。
MOUSEBUTTONUP全部都是大写。
7、MOUSEBUTTONUP事件使用方法
moveRect = None # 移动的对象
while True:
for event in pygame.event.get():
#退出事件
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
#鼠标事件
elif event.type == pygame.MOUSEBUTTONDOWN:
for n in rectList:
if n.collidepoint(event.pos):
# print(event.pos)
moveRect = n #设置变量为选中图形
elif event.type == pygame.MOUSEMOTION:
if moveRect != None:
moveRect.center = event.pos #设置选中图形跟随鼠标位置
elif event.type == pygame.MOUSEBUTTONUP:
moveRect = None #固定图形
8、完整代码展示
import pygame, sys, tangram
pygame.init()
screen = pygame.display.set_mode((700, 500))
pygame.display.set_caption("益智七巧板")
bg = pygame.image.load("bg.png")
sound = pygame.mixer.Sound("sound1.wav")
# 用列表imgNameList存储图片名
imgNameList = ["1.png", "2.png", "3.png", "4.png", "5.png", "6.png", "7.png"]
imgList = [] # 存储加载后的七巧板图片
#循环加载七巧板图片
for n in imgNameList:
img1 = pygame.image.load(n)
imgList.append(img1)
#为每一个七巧板创建Rect对象
rect1 = pygame.Rect(495, 118, 47, 93)
rect2 = pygame.Rect(478, 330, 69, 73)
rect3 = pygame.Rect(532, 184, 36, 73)
rect4 = pygame.Rect(569, 121, 52, 56)
rect5 = pygame.Rect(567, 273, 26, 50)
rect6 = pygame.Rect(517, 255, 26, 51)
rect7 = pygame.Rect(564, 365, 36, 47)
# 用列表rectList存储创建的Rect对象
rectList = [rect1, rect2, rect3, rect4, rect5, rect6, rect7]
moveRect = None # 移动的对象
while True:
for event in pygame.event.get():
#退出事件
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
#鼠标事件
elif event.type == pygame.MOUSEBUTTONDOWN:
for n in rectList:
if n.collidepoint(event.pos):
# print(event.pos)
moveRect = n
elif event.type == pygame.MOUSEMOTION:
if moveRect != None:
moveRect.center = event.pos
elif event.type == pygame.MOUSEBUTTONUP:
moveRect = None
sound.play()
screen.fill((255, 255, 255))
screen.blit(bg, (0, 0))
#绘制七巧板
for i in range(7):
screen.blit(imgList[i], rectList[i])
# 判断游戏是否完成
tangram.win(rectList, screen)
pygame.display.update()
运行效果初始状态截图:
运行效果成功状态截图: