图中同时渲染了十万个像素,没有明显掉帧
我对Pygame的印象一直是慢的扣脚的,直到前段时间看到了一段MandelBrot代码(源地址弄丢了)其中使用了这个功能:pygame.surfarray.make_surface()
这里可以直接把numpy阵列转换为pygame.surface,对比draw来说节省了大量算力
在运算物理效果的时候还可以使用numba即时编译,速度指数型上升。
这里粒子用了水粒子作为示范,原理十分简单,依次检测每个像素下方,左边,右边,如果像素为空则移动到临近像素。
代码见下
import pygame as pg
import random
import numpy as np
from numba import njit, prange
@njit(cache=True)
def palette(im): # I snatched this from stack exchange
im = 255 * (im / im.max())
w, h = im.shape
ret = np.empty((w, h, 3), dtype=np.uint8)
ret[:, :, 0] = ret[:, :, 1] = ret[:, :, 2] = im
return ret
@njit(cache=False,fastmath=False,nopython=True)
def frame_calculation(particles, pix_