实现不同特点的游戏元素

⌚Time: 2024-12-07 19:01:00

👨‍💻Author: Jack Ge

横板闯关游戏里有许多游戏元素是有趣的。比如上下活动的箭。间歇喷火。还有固定炮台。还有近战兵,投掷兵,飞行兵。如何实现这些特点的游戏元素。

这些游戏元素可以分成不同种类。比如地面单位,固定炮台,飞行单位,喷火机关。而实现这些行为的是不同种类的AI控制。

这些游戏元素继承一个AI控制接口,实现接口的比如移动,攻击,等待,跳跃,技能等方法。AI类通过这些接口操作游戏元素类。让游戏元素做出对应的动作。

AI类,实现简单的状态机,让单位巡逻,等待,追击,攻击。逃跑之类的行为。这些AI类继承一个AI基类。不同的AI类可以有自己不同的行为,实现单位不同的行为表现。

class NormalSpriteAI:public SpriteAIBase{
...
    //切换状态
    void switch_sprite_status(){
        ...
    }
    //更新行为  
    void update(){
        ...
    }
};

游戏元素单位一般有个属性文件。在属性文件里,可以指定AI类型,指定了AI类型,也就指定了这个游戏元素是什么类型,有什么行为。

AIType FlySprite #指定这是一个飞行AI控制的单位,它会根据AI控制实现飞行行为

在游戏里一般会有精灵管理器,精灵管理器在创建精灵的时候,会对其进行配置和组装。当检测到AIType的属性后,它会分配一个FlySprite类型的AI给这个精灵。也等于给精灵一个大脑。之后这个精灵的行为就取决于这个ai的控制了。

void create_sprite(){
    
    ...
    if(sprite->get_ai_type()==AIType::FlySprite){
        SpriteAIBase *ai = new FlySpriteAI;
        sprite->set_ai(ai);
        ...
    }
}