| | | | | | |  
 
                       
 您此刻的位置: > > >
     假如建造爆炸结果

假如建造爆炸结果
编纂:游戏兵工厂 公布工夫:2016-12-16 检察:840 次   

爆炸结果是各类游戏中不可或缺的。发生这类结果的办法多种多样,本文先容一种较为简朴的算法,以期举一反三:)这里仅给出须要代码,请了解后本人编程。假如您有更好的算法,也请E给云风一份:)~  
注:为了进步速度,题头演示画面为40x40x32帧。而上面算法将发生80x80x64帧的图像。        

起首,您必需创立一个调色版,我们必要利用到16种色彩(以下)


 
上面不是一个可用的步伐,您所要做的事情是要将它读懂:)   

#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)<<16; hot[c].xc = -0x7FFF 到 0x8000 之间的随机数; hot[c].yc = -0x7FFF 到 0x8000 之间的随机数; } for (c=0; c<画面帧数; c++) { 浑空画面; color = ((c<16) ? c*4 : (80-c)) >> 2; for (c2=0; c2<粒子数; c2++) { for (x=-6; x<=6; x++) { for (y=-6; y<=6; y++) { xx = (hot[c2].x>>16) + x; yy = (hot[c2].y>>16) + y; if ((xx>0) && (yy>0) && (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 < 8) 画面[y][x] = 0; else 画面[y][x] = c2/4; } } } 贮存画面到爆炸动画第 c 帧; }

 

一点倡议:您能够正在步伐一开始,利用这个算法天生爆炸的动画。正在必要利用时,轮回播放。

相干文章:
本月教程排行
局部教程热点 局部推荐教程
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
| || |
DOGAME游戏兵工厂2009-2014HNYU GAME 京ICP备13045305号