先說設定透明度的前提,需要使用不帶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)
實作效果如下:

博主也是新手,如有問題輕噴,,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/41846.html
標籤:其他
上一篇:分布式事物seata例外
