有没有更快的方法来检查 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):
我正在 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):