第三节 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()

运行效果初始状态截图:

alt 图片移动

运行效果成功状态截图:

alt 图片移动成果

results matching ""

    No results matching ""