制作爆炸效果
制作爆炸效果
爆炸效果是各种游戏中不可或缺的。产生这种效果的方法多种多样,
本文介绍一种较为简单的算法,以期抛砖引玉:)这里仅给出必要代码,
请理解后自己编程。如果你有更好的算法,也请E给云风一份:)~
注:为了提高速度,题头演示画面为40x40x32帧。而
下面算法将产生80x80x64帧的图象。
首先,你必须创建一个调色版,我们需要使用到16种颜色(如下)
#000000
#100000
#2C0000
#480000
#650000
#810000
#A10000
#C20000
#E20000
#FF0000
#FF6500
#FF9500
#FFC600
#FFFF00
#FFFF7D
#FFFFFF
下面不是一个可用的程序,你所要作的工作是要将它读懂:)
#define 画面帧数 64
#define 画面大小 80
#define 渲染次数 32
/* 渲染次数越多,爆炸画面中的亮块面积将越大 */
void 创建爆炸效果()
{
unsigned char 画面[画面大小][画面大小];
/* 画面这个数组里最终将存放 0~15 间的整数,对应上面调色版里的16种颜色
*/
long int c, c2, x, y, xx, yy, color;
struct {
long int x, y, xc, yc;
} hot[渲染次数];
for (c=0; c渲染次数; c++) {
hot[c].x = hot[c].y = (画面大小/2) -0x7FFF 到 0x8000 之间的随机数;
hot[c].yc = -0x7FFF 到 0x8000 之间的随机数;
}
for (c=0; c画面帧数; c++) {
清空画面;
color = ((c 2;
for (c2=0; c2渲染次数; c2++) {
for (x=-6; x16) + x;
yy = (hot[c2].y16) + y;
if ((xx0) && (yy0) && (xx画面大小) && (yy画面大小)) {
画面[yy][xx] += (color ((ABS(x)+ABS(y))/3));
if (画面[yy][xx] 63)
画面[yy][xx] = 63;
}
}
}
hot[c2].x += hot[c2].xc;
hot[c2].y += hot[c2].yc;
}
for (x=0; x画面大小; x++) {
for (y=0; y画面大小; y++) {
c2 = 画面[y][x];
if (c2 画面[y][x] = 0;
else
画面[y][x] = c2/4;
}
}
}
储存画面到爆炸动画第 c 帧;
}
一点建议:你可以在程序一开始,使用这个算法生成爆炸的动
画。在需要使用时,循环播放。
云风工作室制作