如何解决有没有更快的方法来检查 pygame 表面的 list[i] 是否具有 alpha 0
我正在 pygame 中制作一个精灵表类,我将从图像中获得的每一帧都放在一个列表中。 但是,有时精灵表有一些空帧。 例如我用 2 个精灵动画制作了一个图像,所以我把每一个都排成一行,但第一个比第二个大 1 帧,所以第二个有一个空帧。
我执行此代码是为了检查框架是否为空。我使用了一个反向循环,因为大多数空帧都在列表的末尾,所以我可以在任何帧不为空时中断,这样就不会花费太多时间。
for i in reversed(range(len(frames))):
frame_alpha_as_array = surfarray.array_alpha(frames[i])
if np.sum(frame_alpha_as_array) == 0:
del(frames[i])
else:
break
但是,我想知道是否有更快的方法来做到这一点,这样它就不会占用太多的 cpu/gpu/ram (IDK)。
我对编程比较陌生,所以如果我做错了什么,不要太苛刻。
解决方法
使用 pygame.surfarray.pixels_alpha()
而不是 pygame.surfarray.array_alpha()
。 pygame.surfarray.array_alpha()
将像素 alpha 复制到二维数组,而 pygame.surfarray.pixels_alpha()
直接引用像素 alpha。
参见pygame.surfarray.pixels_alpha()
创建一个新的 2D 数组,直接引用 Surface 中的 alpha 值(透明度)。对数组的任何更改都会影响 Surface 中的像素。 这是一个快速的操作,因为没有数据被复制。
此数组引用的 Surface 将在数组的生命周期内保持锁定状态。
使用numpy.any
测试是否有任何数组元素大于0:
if not np.any(surfarray.pixels_alpha(frames[i]) != 0):
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。