小甲鱼83课关于图片透明度设置的问题详解 python

先说设置透明度的前提,需要使用不带alpha通道的图片才能设置透明度,否则会达不到目的(具体原因博主也不太清楚(手动笑哭))

首先说思路,我们需要得到的是在背景图片上对小甲鱼实现透明,整体思路就是创建一个背景不带alpha通道、所贴的图片带alpha通道的一个suface对象,具体思路如下:

  (1)、 首先创建一个与图片等大的不带alpha的矩形surface对象temp

(2)、在temp上绘制背景,target相对于temp的位置变成了(-x,-y),此时temp得到的是与图片大小一样,绘制着背景的surface对象

(3)、将带alpha通道的图片绘制上去,此时的目标图片相对于矩形框的位置为(0,0)

(4)、此时temp已经成为了一个带背景图片与目标乌龟的一张完整图片,由于temp在设置之初是不带alpha的surface对象,因此可以使用set_alpha()方法设置整个图片的透明度

(5)、将设置好透明度的temp作为一张独立图片贴到指定位置。

 

详细代码如下:

import pygame
import sys
from pygame.locals import *

pygame.init()

size = width, height = 640, 480
bg = (0, 0, 0)

clock = pygame.time.Clock()
#绘制size尺寸的背景
screen = pygame.display.set_mode(size)
#显示标题
pygame.display.set_caption("FishC Demo")
#带alpha的目标图片
turtle = pygame.image.load("turtle.png").convert_alpha()
#不带alpha的背景图片
background  = pygame.image.load("background.jpg").convert()
position = turtle.get_rect()
#turtle 位置中心
position.center = width // 2, height // 2

#target 背景 sorce 图片 location 图片的实时位置  opacity 透明度
def blit_alpha(target, source, location, opacity):
    #小甲鱼的位置坐标
    x = location[0]
    y = location[1]
    #temp:一个与图片等大的不带alpha的矩形surface对象
    temp = pygame.Surface((source.get_width(), source.get_height())).convert()
    #在temp上绘制背景,target相对于temp的位置变成了(-x,-y),此时temp
    #得到的是与图片大小一样,绘制着背景的surface对象
    temp.blit(target, (-x, -y ))
    #将带alpha通道的图片绘制上去,此时的目标图片相对于矩形框的位置为(0,0)
    temp.blit(source, (0, 0))
    #使用set_alpha()方法temp的透明度,透明度设置为200
    temp.set_alpha(opacity)
    #将设置好透明度的temp“贴到”指定位置
    target.blit(temp, location)

while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            sys.exit()
    #背景位置为(0,0)
    screen.blit(background, (0, 0))
    #调用绘制函数
    blit_alpha(screen, turtle, position, 200)
    # 更新整个待显示的Surface对象到屏幕上
    pygame.display.flip()
    #延迟30ms
    clock.tick(30)

实现效果如下:

 

 

博主也是新手,如有问题轻喷。。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值