当前位置: 首页 > news >正文

虚幻基础:组件间的联动


能帮到你的话,就给个赞吧 😘


文章目录

  • 受击组件受击时,攻击组件不能攻击
  • 联动方式
    • 直接调用
    • 回调
    • 事件驱动
    • 接口依赖
    • 消息队列
  • 直接调用
  • 回调
  • 事件驱动
  • 接口依赖
  • 消息队列

受击组件受击时,攻击组件不能攻击

联动方式

直接调用

回调

事件驱动

接口依赖

消息队列

直接调用

// 直接调用方式:受击组件主动控制攻击组件
#include <iostream>
#include <chrono>
#include <thread>// 攻击组件
class AttackComponent {
private:bool canAttack = true;const int cooldownMs = 2000; // 受击后禁止攻击的时间(2秒)public:// 尝试攻击void attack() {if (canAttack) {std::cout << "攻击成功!" << std::endl;} else {std::cout << "受击后无法攻击!" << std::endl;}}// 禁止攻击(供受击组件直接调用)void disableAttack() {canAttack = false;std::cout << "攻击被禁用..." << std::endl;// 启动定时器,一段时间后恢复攻击std::thread t([this]() {std::this_thread::sleep_for(std::chrono::milliseconds(cooldownMs));canAttack = true;std::cout << "攻击已恢复!" << std::endl;});t.detach();}
};// 受击组件
class HitComponent {
private:// 直接持有攻击组件的引用(强依赖)AttackComponent& attackComp;public:// 构造函数中必须传入攻击组件HitComponent(AttackComponent& ac) : attackComp(ac) {}// 被攻击时触发void takeHit() {std::cout << "受到攻击!" << std::endl;// 直接调用攻击组件的方法,禁止攻击attackComp.disableAttack();}
};// 使用示例
int main() {AttackComponent attackComp;HitComponent hitComp(attackComp); // 受击组件必须强绑定攻击组件attackComp.attack();hitComp.takeHit();	// 受击组件受击时,调用 攻击组件的禁止攻击attackComp.attack(); // 攻击失败// 等待冷却时间std::this_thread::sleep_for(std::chrono::milliseconds(2500));// 冷却后:可以攻击attackComp.attack();return 0;
}

回调

// 回调方式:受击组件通过 回调 通知攻击组件响应
#include <iostream>
#include <chrono>
#include <thread>
#include <functional>// 攻击组件
class AttackComponent {
private:bool canAttack = true;const int cooldownMs = 2000; // 受击后禁止攻击的时间(2秒)public:// 尝试攻击void attack() {if (canAttack) {std::cout << "攻击成功!" << std::endl;} else {std::cout << "受击后无法攻击!" << std::endl;}}// 受击事件的回调处理函数(禁止攻击)void onHitReceived() {canAttack = false;std::cout << "攻击被禁用..." << std::endl;// 启动定时器,一段时间后恢复攻击std::thread t([this]() {std::this_thread::sleep_for(std::chrono::milliseconds(cooldownMs));canAttack = true;std::cout << "攻击已恢复!" << std::endl;});t.detach();}
};// 受击组件
class HitComponent {
private:// 存储回调函数(不依赖具体组件类型)std::function<void()> onHitCallback;public:// 提供注册回调的接口void setOnHitCallback(std::function<void()> callback) {onHitCallback = callback;}// 被攻击时触发void takeHit() {std::cout << "受到攻击!" << std::endl;// 触发回调(通知攻击组件)if (onHitCallback) {onHitCallback();}}
};// 使用示例
int main() {AttackComponent attackComp;HitComponent hitComp;		// 受击组件无需绑定攻击组件// 注册受击组件的回调hitComp.setOnHitCallback([&attackComp]() {attackComp.onHitReceived();});attackComp.attack();hitComp.takeHit();		// 受击组件受击时,调用 注册的回调// 攻击失败attackComp.attack();	// 等待冷却时间std::this_thread::sleep_for(std::chrono::milliseconds(2500));// 冷却后:可以攻击attackComp.attack();return 0;
}

事件驱动

接口依赖

消息队列

http://www.dtcms.com/a/458359.html

相关文章:

  • 东莞商城网站建设价格10条重大新闻事件
  • 字体设计教程网站我的网站现在没有排名_我想问是不是花钱做百度推广就会有排名
  • 常规的微距镜头有哪些类型?能做什么?
  • 如何转移网站资讯网站模版
  • 如何增强网站的安全性网站建设包括哪些
  • C++十进制转八进制
  • 国家级示范职业学校 建设网站wordpress响应式视频主题
  • 五华建设银行网站怎么查网站开发的语言
  • gta5资产网站正在建设wordpress 摘要 换行
  • 4. 电容1
  • 做网站用什么电脑好如何做纯文本网站
  • 苏州建设监理有限公司网站示范校建设网站维护
  • 【开题答辩全过程】以基于Vue的医院预约挂号系统的设计与实现为例,包含答辩的问题和答案
  • 做素材网站存储南京网站建设推南京网站建设设计
  • 顺义网站优化网站建设的描述
  • editplus网站开发网站打开慢怎么回事
  • 联想乐权威解析:2025年联想笔记本选购指南
  • 用vuejs做的网站学习网站建设
  • wordpress谷歌插件wordpress 优化 插件
  • 深圳网站建设有市场吗怎么在广西建设厅网站注销c证
  • 网站推广招商php网站开发模板
  • 如何给自己的公司建网站网站快速收录技术
  • 夏家胡同网站建设西宁那有做网站的
  • 国外外包网站云南推广公司
  • 做景观私活的网站个人买域名有什么用
  • 衡南网站建设自己做网站软件
  • 免费下软件的网站seo刷词
  • php mysql网站开发全程实例.pdf做网站的费用属于什么费用
  • 天津手动网站建设调试二级建造师证书查询入口
  • 数据结构学习(2)——多功能链表的实现(C语言)