Buff在哪里储存和更新

⌚Time: 2024-09-13 16:38:00

👨‍💻Author: Jack Ge

游戏里的buff我在精灵类里面储存,在精灵的update函数里进行更新,这是简单的办法

void update(){
    ...
    for(auto &buff:m_buffList){
        buff->update();
    }
}

也可以储存在buff管理器里更新

class BuffManager{
    ...
    void update(){
        for(auto &buff:m_buffList){
            buff->update();
        }
    }   
};

但是在buff管理器时容易忽略当精灵死亡时删除buff,导致buff还在更新,但是buff的宿主精灵已经销毁,就会导致程序崩溃。

所以在精灵销毁时,要在析构函数里面销毁属于它的所有buff,通过一个精灵标识来销毁自己的buff

~Sprite{
    BuffManager->destroy_all_buff(m_spriteIdentifier);
}

在精灵管理器里创建buff时,先获取一个精灵标识,通过精灵标识就可以标志和储存这个精灵的所有buff

int get_sprite_identifier(){
    ...
}
void create_buff(int identifier,...){
    ...
}