有没有更快的方法来检查 pygame 表面的 list[i] 是否有 alpha 0

is there a faster way of checking if list[i] of pygame surface has alpha 0

我正在 pygame 中制作精灵 sheet class,我将从图像中获得的每一帧都放在一个列表中。 但是,有时精灵 sheet 有一些空帧。 例如我做了一张有2个sprite动画的图片,所以我把每一个都排成一排,但是第一个比第二个大一帧,所以第二个有一个空帧。

我做了这段代码来检查框架是否为空。我使用了反向循环,因为大多数空帧都在列表的末尾,所以我可以在任何帧不为空时中断,这样就不会花那么多时间。

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() instead of pygame.surfarray.array_alpha()pygame.surfarray.array_alpha() 将像素 alpha 复制到二维数组,而 pygame.surfarray.pixels_alpha() 直接引用像素 alpha。

请参阅 pygame.surfarray.pixels_alpha()

的文档

Create a new 2D array that directly references the alpha values (degree of transparency) in a Surface. Any changes to the array will affect the pixels in the Surface. This is a fast operation since no data is copied.
The Surface this array references will remain locked for the lifetime of the array.

numpy.any判断是否有数组元素大于0:

if not np.any(surfarray.pixels_alpha(frames[i]) != 0):