|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 lzb1001 于 2022-7-11 15:41 编辑
代码略(按小乌龟教材和视频中)
【代码分析】自定义函数blit_alpha()实现步骤:
①首先创造一个不带Alpha通道的Surface(事实上就是小乌龟所在的矩形区域)
对应代码:temp = pygame.Surface((source.get_width(), source.get_height())).convert() # 最底层(不带Alpha透明图层通道)
②然后用背景覆盖小乌龟所在的矩形区域位置(矩形区域与背景的正中心点完全重合),背景不带Alpha通道(background = pygame.image.load(r'd:\\work\\grass.jpg').convert())
对应代码:temp.blit(target, (-x, -y)) # 中间层(不带Alpha透明图层通道)
③此刻temp得到的是一个尺寸与小乌龟的尺寸一样大小(不带Alpha通道)、上面绘制着背景(不带Alpha通道)的Surface对象,这个Surface对象不带Alpha通道
④ 再将带Alpha通道的小乌龟覆盖上去
对应代码:temp.blit(source, (0, 0)) # 最顶层(带Alpha透明图层通道)
此时分析temp的构成,其应由三层组成:最底层是一个黑色矩形框(不带Alpha透明图层通道),其位置、大小与turtle相同;中间层是screen(不带Alpha透明图层通道);最顶层是turtle(带Alpha透明图层通道)。temp由以上三者合而为一,其中最顶层带alpha透明图层通道,这样的temp可以通过调用set_alpha()方法设置其透明度???
⑤ 由于temp是不带Alpha通道的Surface对象,因此可以使用set_alpha()方法设置整个图片(整个图片是否包含④ 中带Alpha通道的小乌龟?)的透明度
对应代码:temp.set_alpha(opacity)
--若此时的temp包含了④ 中带Alpha通道的小乌龟,那此时的temp是否带Alpha通道?若此时的temp带Alpha通道,如何可以使用set_alpha()方法设置整个图片的透明度?反之,若此时可以使用set_alpha()方法设置整个图片的透明度,说明此时的temp不带Alpha通道
⑥ 最后将设置好透明度的temp“贴”到指定位置上---此时的temp是否包含④ 中带Alpha通道的小乌龟?
对应代码:target.blit(temp, location)
------------------------------------------
Windows 10 专业版 | Python 3.7.6
------------------------------------------
【我的问题】
1、以上黑色文字主要根据小甲鱼教材及视频整理所得,红色字体为我加的备注和疑惑不理解的地方,请大神和诸位不吝指点
2、教材和视频中仅介绍实现的步骤,好像未提及实现原理
******************************
感谢大神不吝赐教,为新手解疑释惑。
赠人玫瑰,手有余香,好人一生平安! |
|