植物大战僵尸类图 21.4.27
2021-04-27 23:38:40 73 举报
植物大战僵尸类图,用于设计植物大战僵尸游戏。
作者其他创作
大纲/内容
MenuScene
游戏主菜单场景。
bool init() 初始化菜单场景
SunFlower向日葵
自动产生可点击的阳光。
autoProductionSun(float);bePlaced() override;
Pea豌豆
普通豌豆,经过火焰时可变成火焰豌豆bool isFile;
PVZUtil
工具类,用于封装获得一些当前场景关键对象的代码以及用作工厂类来创建组装对象。
createPlant(const string& plant);//根据植物名创建一个植物,具体创建过程和组装过程外界不需要考虑createZombies(const string& zombieName) 创建组装一个僵尸createSelectAble(const std::string& targetName) 创建一个可触摸无物,一般是卡牌类使用该函数static getBattlefieldScene()获得战场场景,如果当前场景不是战场场景,获得空指针.static getPlayerAgent() 该类保存了一个单例的PlayerAgent对象,该方法来获得
Plant
BaseScene
基础抽象类,内部封装了导入FairyGUI场景的代码。和初始化时会初始化hand:PlayerAgent的功能hand:PlayerAgent*
PlayerAgent* getPlayerAgent()constbool init() 初始化PlayerAgentgetGRoot()getGView()
抛射自动追踪型
投手发射的,可以是范围可以是单体伤害。只有将要到目标单位才会开始计算碰撞。
Unit
PVZ中的一个显示单位。如植物,僵尸,花盆。内部有精灵或骨骼动画子节点来决定绘制的效果。负责决定如何显示节点,用精灵还是骨骼动画,封装于此
setAgentWithSpriteWithFileName(string)getAgent()获得用于显示的节点,人物的代理
继承
Scene场景类
BattlefieldScene
战场类,游戏界面。
Zombie
enum getDirection() 面朝方向 int atk;float atkCD;void bePlaced()开始工作void doThink(float f);//僵尸周期性思考。决定下一步决策,是移动还是攻击
UniformLinearProjectile匀速直线运动型
如星星射手,从一个出发点水平移radio 移动朝向角度记录当前行数。float direction();投射物角度doHitSomebody(CanContact&) 碰撞了某个可碰撞的回调
Menu菜单类
接口 createFromCard从卡牌创建,所以自然有卡牌的属性
getCard():Card* 获得创建该事物的卡牌setCard(Card*)
接口 SelectAble可被玩家选中(拿起或点击)
某一些单位可以被选中。PlayerAgent类会持有该类对象.
bePickedUp();//被某手拿起时触发的回调bePlaced(); 被放置时触发的回调。undoPlace(); 撤销放置时的回调。isCatch()=0;是否需要被持有,还是一次性的效果。如果返回true就是可被持有,否则就只是触发一下比如阳光
卡牌CD功能,阳光系统,自动掉落阳光
MenuItemImage图片菜单项
Peashooter 豌豆射手
定时发射子弹。调度器发射子弹。
Doshoot();//创建一个豌豆,调整发射角度,发射。init();bePlaced()autoProductionBullet(float)
Projectile投射物
绑定刚体。有自己的运动轨迹。有的是指向性(猫荷),有的是按轨迹运动(多数),有的是穿透(大喷菇),有的是抛射物(固定区域单体或范围)具有碰撞的功能。Unit* Shooter();void doContact(CanContact*);void set/getHurtValue();
Sun
sunValue:int:0
普通僵尸
类CanContact
代表能被投射物 击中的对象。具有碰撞的能力。void doContact(projectile*);//碰撞时会自动调用的回调void setPhysicBodyBySelfContentSize() 设置刚体为自身图片大小void setType(enum Type); 设置类型,有植物和僵尸和植物投射物类型,会自动该有的计算并设置掩码。不设置类型就默认什么也不会发生。
碰撞
Card
表示一个卡牌,玩家可以点击该卡牌。
Node节点类
PlayerAgent
作为用户抽象出的手。用该手进行所有的交互动作。拿取或者其他操作。每次放置会提示对应的卡牌和对应的对象已放置。单例类。计数会自动增加一,在切换场景时可以携带物品。
bePikeUp(SlectAble*)将某个物品拿到手下putDown()将某个物品放到某位置isEmptyHand():boolcanPickUp():bool
实现
CardBar
sunSum:int所有修改阳光的函数都会调用维护阳光计数的功能
_updateSunCounter() 刷新显示阳光计数值addCard(Card*)addSun(Sun*)userCard(Card*)//使用某个卡牌getSunValue():int Card* currentCard()//当前正在选用某个卡牌,当该卡牌没释放时,无法使用下一个卡牌void undoUserCard()//撤销使用当前使用的卡片
类Life
有生命的。double set/getHp();bool isAlive();//是否仍然活着void beHurt(double value);void beCure(double value);void died(){}double get/setMaxHp();void set/getLifeBarVisible(bool)void initWithUnit() 给某个单位来初始化一个生命条。
0 条评论
下一页