第四十章 追加道具获得的处理吧

>>点此回到教程目录

事到如今我有一种其实完全没有必要把章节一分为二的想法了。(汗)

本章是上一章节的继续,我们来试着实现道具的接触判定以及接触的时候由道具引起的状态变化吧。

这一章中要追加的处理非常少量。

不管怎么说我们先试着定义碰撞判定,然后当道具那个范围内的时候进行状态变化吧。

碰撞判定在英语中称为Hitbox,大家不妨作为小知识记住吧。b

—-在 define.h 中进行以下追加 —-

//道具的碰撞判定
#define ITEM_HIT_BOX 20

—-在 out.cpp 中追加以下红字部分 —-

//与道具接触
//道具 0:小power 1:小点 2:弹点 3:小金 4:大power 5:大金

/***修改请注意***/
void ch_and_item(){
        for(int i=0;i<ITEM_MAX;i++){
                if(item[i].flag>0){
                        double x=item[i].x-ch.x,y=item[i].y-ch.y;
                        if(x*x+y*y<ITEM_HIT_BOX*ITEM_HIT_BOX){//如果在碰撞判定内的话
                                switch(item[i].knd){//根据种类变更
                                        case 0: ch.power+=3; break;
                                        case 1: ch.point+=1; break;
                                        case 2: ch.score+=1; break;
                                        case 3: ch.money+=1; break;
                                        case 4: ch.power+=50;break;
                                        case 5: ch.money+=10;break;
                                }
                                if(ch.power>500)ch.power=500;
                                if(ch.point>9999)ch.point=9999;
                                if(ch.money>999999)ch.money=999999;
                                if(ch.score>999999999)ch.score=999999999;
                                item[i].flag=0;
                                se_flag[34]=1;//获取音
                        }
                }
        }
}
/***修改请注意***/

//碰撞判定main
void out_main(){
    cbom_and_enemy();//让敌人承受Boom的伤害
    cshot_and_enemy();//自机射击与敌人的处理
    enemyshot_and_ch();//敌人射击与自机的处理

    /***修改请注意***/
    ch_and_item();//道具接触处理
    /***修改请注意***/

}

—-在 load.cpp 的load函数中进行以下追加 —-

        sound_se[34]=LoadSoundMem("../dat/se/item_get.wav");

在进行变化状态而增加值的时候,不妨先像上面那样决定好上限值吧。

我曾经认为不可能会出现能得到9亿点score的人(译者注:指在四圣龙神录中),因此我没有设置一个上限值,也正是因为这个原因偏偏有人就超过了上限值而引起了游戏的BUG。

像score这种不可能为负数的值我们将其设置为unsigned int虽然也是一个解决方案,但是如果像上面那样设定的话就没有问题了。

我们将会在下一章中进行说明,这个上限值是有它的意义的。


运行结果


>>点此回到教程目录

results matching ""

    No results matching ""