制作爆炸效果

王朝other·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

制作爆炸效果

制作爆炸效果

爆炸效果是各种游戏中不可或缺的。产生这种效果的方法多种多样,

本文介绍一种较为简单的算法,以期抛砖引玉:)这里仅给出必要代码,

请理解后自己编程。如果你有更好的算法,也请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 帧;

}

一点建议:你可以在程序一开始,使用这个算法生成爆炸的动

画。在需要使用时,循环播放。

云风工作室制作

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航