Yao-class-cpp-studio / battle_game

MIT License
9 stars 87 forks source link

Agreement: keys for special bullets and skills #40

Open EDGE-qy opened 1 year ago

EDGE-qy commented 1 year ago

鉴于可能会有一个单位拥有多种技能/子弹可供选择的情况,在这里做一个约定

按1/2/3/4切换同一单位不同的子弹

按Z/X/C/V释放同一单位不同的技能

XuGW-Kevin commented 1 year ago

Skill units支持加入技能。 为了方便玩家操作,技能应当使用键盘快捷键完成。特别地,由于本游戏使用W/A/S/D控制转向,为方便起见,技能采用按键E/Q/R完成。我们规定E/Q/R表示的技能强度递增,并建议按照E/Q/R的顺序依次实现技能(可不足3个,但主动技能一般不会超过3个)。此外,P表示被动技能,这一技能不需要用户输入。 用户通常希望从UI界面获取技能的简略信息。因此,如果您不希望技能被展示在UI界面中,请使用ADD_SELECTABLE_UNIT_WITHOUT_SKILL()进行调用(如果您没有设置技能,则不会显示任何信息。因此技能界面向前兼容)。此外,您需要维护一个名称为skill_的信息存储库,它已经是您的units类型中的protected类型。它的格式为std::vector 。其中Skill是一个用于交互的结构体。 units支持子弹切换界面显示。一个units可以拥有不止一种射击的子弹,并且子弹切换通常需要一定的冷却时间。如果您不希望展示子弹界面,您只需要留空即可。 如果您希望展示子弹界面,请在skill_里加入type=B的一个元素。如果有不止一个子弹,请不要多次添加,而是填写当前的bullet_type和一共的bullet_total_number。子弹界面对您的输入具有一定的适应性,例如,如果您只有一种子弹,将不会展示切换信息;如果您的冷却时间为0,将不会展示冷却进度。 enum SkillType { E, Q, R, P, B }; struct Skill { std::string name; std::string description; std::string src; uint32_t time_remain; uint32_t time_total; uint32_t bullet_type; uint32_t bullet_total_number; SkillType type; std::function<void(void)> function; }; 你需要在name中填写技能名称,description为技能简述(若有),src为技能图示路径(若有),time_remain为技能冷却时间,time_total为技能冷却总时间,type为技能类型,function为技能调用的接口(可选择不提供)。若选择提供,使用格式为example.function=SKILL_ADD_FUNCTION(YourUnits::YourFunction)。 使用示例请参考inferno_tank类型。技能显示页面可能会持续更新,但可以承诺skill_这一交互容器会保持不变。也即技能显示页面的更新会自动兼容您的数据,您无须再次编写。如果您发现了显示页面的BUG或者希望增加更多内容(如您可能希望加入用户状态,如加速/灼烧等),欢迎联系XuGW-Kevin。

XuGW-Kevin commented 1 year ago

当然,目前主仓库还没有这段代码。您可以通过git clone https://github.com/XuGW-Kevin/battle_game.git -b display 进行体验。

XuGW-Kevin commented 1 year ago

61

wmj2022 commented 1 year ago

我在#11中构建了一个可切换形态的坦克,或许有所帮助