第五十三章 试着制作汉字弹幕吧
>>点此回到教程目录
接下来我们把在52章中制作好的汉字弹幕数据显示出来吧。
首先,我们做一些预先准备。并且,本次我们追加了2种新的子弹。
— 在define.h 中进行以下追加 —
#define FONT_BULLET_MAX 1000
#define FONT_NUM_MAX 10
—在 GV.h 中进行以下追加 —
GLOBAL BlPoint_t BlPoint[FONT_NUM_MAX];
—在 func.h 中进行一下追加 —
extern void boss_shot_bulletH000();
extern void boss_shot_bulletH001();
(中间省略)
extern void boss_shot_bulletH011();
extern void boss_shot_bulletH012();
extern void boss_shot_bulletH013();
void (*boss_shot_bullet[DANMAKU_MAX])() =
{
boss_shot_bulletH012,
boss_shot_bulletH013,
boss_shot_bulletH000,
(中间省略)
};
—在 struct.h 中进行以下追加 —
/单个汉字子弹的信息(53)
typedef struct{
int Knd;
int Col;
float Angle;
float x,y;
}Bl_t;
typedef struct{
int Num;
Bl_t Bl[ FONT_BULLET_MAX ];
}BlPoint_t;
—在 function.h 中进行以下追加 —
GLOBAL int load_font_dat(char name[32], BlPoint_t *Bp);
—在 ini.cpp 中进行以下变更 —
boss.appear_count[0]=50;
—在 load.cpp 的 load() 中进行以下追加 —
LoadDivGraph( "../dat/img/bullet/b12.png", 10 , 10 , 1 , 12 , 12 , ImgBullet[12]) ;
LoadDivGraph( "../dat/img/bullet/b13.png", 10 , 10 , 1 , 22 , 22 , ImgBullet[13]) ;
接下来,我们来读入弹幕数据,并显示出来吧。
首先就是读入。既然我们的数据是用fwrite把结构体的内容一口气写出去的,因此我们就可以用fread一口气把结构体的内容都读进来。
紧接着,汉字坐标数据的保存我们用BlPoint这个数组来进行。
我们试着来做出这样的函数,我们只需要将想要用来保存汉字弹幕数据的变量以及文件名作为参数传到这个函数中,那么就可以将汉字弹幕数据保存到那个变量中。
int load_font_dat(char name[64], BlPoint_t *Bp){
int i;
char fname[128];
FILE *fp;
sprintf(fname,"../dat/font/%s.dat",name);
fp = fopen( fname , "rb" );
if( fp == NULL )
return -1;
fread( Bp, sizeof(BlPoint_t), 1, fp );
fclose(fp);
return 0;
}
汉字弹幕数据我们存到了“dat/font/龍.dat”中。
传入的name字符串比如有“龍”这个字,为了让它变为“data/font/龍.dat”这个样子,我们使用sprintf函数向上面那样子写就行了。
接下来,只要用fread函数读入那个路所指向的文件即可。如果读入出现错误返回-1。
那么接下来试着制作弹幕吧。
这次我们试着制作基本的2个弹幕。
首先,弹幕数据是这个样子的。

这次为了让颜色鲜明我们弄得五颜六色,嘛,到现在为止我想还没有人认为我的颜色使用是很没品的吧。(诶?)
如果你能够明白接下来我们能够像这样子,同时处理许多种颜色以及许多种类的子弹的话我就很欣慰了。
使用这个数据我们试着制作下面那样的2个弹幕吧。