Cocos3.4 横版游戏制作-《KillBear》-添加敌人+简单AI实现

本文介绍了如何在Cocos2d-x v3.4中开发横版游戏《KillBear》,添加敌人角色和实现简单的AI行为。通过有限状态机(FSM)设计敌人的攻击、巡逻、发呆等状态,实现敌人根据视野和攻击范围动态调整行为。在GameLayer中使用数组管理敌人,并展示最终运行效果。
摘要由CSDN通过智能技术生成

转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。
资源为网上寻找的,仅研究学习用,若是侵犯版权请通知本人整改。


上一篇: Cocos3.4 横版游戏制作-《KillBear》-添加血条 攻击按键
上篇在状态层加入了血条,并添加了一个攻击按键
本篇将在前面的基础上添加敌人,并通过有限状态机(FSM)实现简单的AI


开发环境

win64 : vs2010
Cocos2d-x v3.4Final
TexturePackerGUI
MapEdit


代码A

角色Role

Enemy

创建一个继承基础Role类,作为敌人.

  • .h
typedef enum {
    AI_IDLE = 0,
    AI_PATROL,
    AI_ATTACK,
    AI_PURSUIT
}AiState;

作为AI类型

其他的代码和Hero大同小异

public:
    Enemy();
    ~Enemy();
    bool init();
    void updateSelf();
    CREATE_FUNC(Enemy);
    CC_SYNTHESIZE(cocos2d::Vec2, m_moveDirection, MoveDirection);
    CC_SYNTHESIZE(float, m_eyeArea, EyeArea);
    CC_SYNTHESIZE(float, m_attackArea, AttackArea)
    CC_SYNTHESIZE(AiState, m_aiState, AiState);
private:
    void decide(const cocos2d::Vec2& target, float targetBodyWidth);
    void execute(const cocos2d::Vec2& target, float targetBodyWidth);
    unsigned int m_nextDecisionTime;

由于敌人是AI,我们要给它设定一些区域,视野,最大攻击判定区,AI状态等.

  • .cpp

init类似

        Animation *idleAnim = this->createNomalAnimation("bear_idle_%02d.png", 3, 6);
        this->setIdleAction(RepeatForever::create(Animate::create(idleAnim)));
        ...

然后是类似Hero的自更新函数updateSelf刷新自己状态

void Enemy::updateSelf()
{
    //this->execute(global->hero->getPosition() + global->hero->getBodyBox().actual.origin , global->hero->getBodyBox().actual.size.width);
    this->execute(global->hero->getPosition(), global->hero->getBodyBox().actual.size.width);//对象坐标及body宽度
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值