马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
1. 起因
我以前写过一个单图序列帧cdd。
[RenPy] 纯文本查看 复制代码 # 单图序列帧动画组件
class SquenceAnimator2(renpy.Displayable):
def __init__(self, img, row, column, interval, loop=True, **kwargs):
super(SquenceAnimator2, self).__init__(**kwargs)
# im入参是字符串,需要转为Image对象,获取尺寸信息
self.img = Image(img)
self.size = renpy.image_size(self.img)
# 行数
self.row = row
# 列数
self.column = column
# 单帧宽度
self.frame_width = int(self.size[0] / column)
# 单帧高度
self.frame_height = int(self.size[1] / row)
# 序列帧长度
self.length = row * column
self.sequence = []
# 循环嵌套切割单帧图像
for i in range(row):
for j in range(column):
self.sequence.append(Crop((self.frame_width*j, self.frame_height*i, self.frame_width, self.frame_height), self.img))
self.current_index = 0
self.show_timebase = 0
self.interval = interval
self.loop = loop
def render(self, width, height, st, at):
# st为0时,表示组件重新显示
if st == 0:
self.show_timebase = 0
self.current_index = 0
if (st >= (self.show_timebase + self.interval)):
self.show_timebase = st
self.current_index += 1
if self.current_index >= self.length:
if self.loop:
self.current_index = 0
else:
self.current_index = self.length - 1
render = renpy.render(self.sequence[self.current_index], width, height, st, at)
renpy.redraw(self, 0)
return render
发现某些帧的右侧和底部边缘可能异常显示其他帧的左侧和顶部。反复检查图片资源和剪裁坐标后没有发现问题,实际原因始终未找到。
2. Ren'Py issue
Ren'Py Issue #6376
提出该issue的网友指出,在“change screen size”(应该指修改屏幕分辨率)时,几种Crop方案的显示效果不同。
我用issue中提供的图片进行验证后发现,完整分辨率显示都没问题,小于项目设置分辨率使用Crop()则可能出现显示错误。
例如,项目分辨率为1920×1080,以1920×1080或更高分辨率的窗口(或全屏)运行可以正确显示,以1744×981分辨率的窗口运行时白色方块边缘会出现黑色。
renpytom回复说,该问题由“GPU缩放图像的处理方式导致”。但他没有解释 im.Crop() 始终能正确显示的原因。
3. 解决方案
可以直接无视……反正完整分辨率下可以正确显示。
强迫症患者可以使用 im.Crop() 进行裁剪。但 im.Crop() 被标记为deprecated,未来的某个Ren'Py版本也许就不能正常运行了。
|