[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
Re: [pygame] Using Numeric & Surfarray with alpha values
On Sat, 26 Nov 2005 18:28:16 -0500
Mike Rotondo <mr001m@xxxxxxxxxxxxxxxxxx> wrote:
We are writing a 2D particle engine and we would like to
render each particle with gradually decreasing alpha values.
However, our original image for the particles has per-pixel
alpha, so we can't use set-alpha. So, we are going to have to
modify each pixel's alpha value ith Numeric, it seems.
We have a value for the time left for the particle to live,
named lifetime, and a value for how long it will live, named
decay. The value (lifetime/decay) is the percent of the
original alpha value we want to render each pixel with. So,
if a pixel in the original image has alpha 200, and a
particular particle has lifetime 50 and decay 100, we would
want to render that pixel in that particle with an alpha of
200 * (50/100) = 100.
We are trying to do this with numeric & surfarray, but are
having trouble with array types. The best we've been able to
do is to create a list comprehension which does the job:
[[pixel and (pixel * particle.life / particle.decay) for pixl
in row] for row in array]
This uses short circuit evaluation and the fact that booleans
return the last object they looked at to return either the
pixel's alpha value if it is 0, or the pixel's alpha value
times our percentage if it is not 0.
array is pygame.surfarray.array_alpha(original_image)
SO, my question is: What is the best way to translate the
above list comprehension into Numeric, so as to speed it up?
Thanks,
Mike Rotondo
I don't know but it sounds cool!
Sincerely, Matt