摘要: 引入哈希字符串 由于代码中存在大量的名字比如:UI的状态名normal/hover/pressed,音乐、音效ui_hover/battle_bgm,纹理/声音路径assets/textures/...、assets/audio/...等等,这些使用的都是std::string()来存、比较、查找, 阅读全文
posted @ 2026-03-24 19:12 wenyiGamecpp 阅读(50) 评论(0) 推荐(0)
摘要: 捕获与中断信号传递 现在我们首先要解决上一节的问题,就是防止信号的穿透。 当我们压入多个场景的时候,每个场景在init()都订阅了同一个动作;那么当你再次触发这个动作的时候,所有场景的回调都会触发(因为它们都连接在同一个信号上)。 我们希望输入信号只被当前场景处理,或者允许某个回调"捕获并中断"后续 阅读全文
posted @ 2026-03-23 20:42 wenyiGamecpp 阅读(44) 评论(0) 推荐(0)
摘要: 事件总线与场景切换 前面我们已经将输入模块InputManager做成了信号驱动,将对应的抽象动作的状态(pressed、hold、released)做成信号,在场景GameScene中注册响应的回调函数,输入模块在update的时候触发回调。 这节我们将完成事件总线dispatcher以及将场景S 阅读全文
posted @ 2026-03-21 10:47 wenyiGamecpp 阅读(80) 评论(0) 推荐(0)
摘要: 概述 之前游戏我们调用handleInput,这使得程序形成了每帧都会走一遍的轮询模式,这种方式不是我们想要的。现在我们可以修改我们的InputManager,把输入模块升级为“信号驱动”,由于我们的输入是抽象动作和按键的映射,所以对于某个动作,可以有四种状态(PRESSED、HOLD、RELEAS 阅读全文
posted @ 2026-03-18 20:52 wenyiGamecpp 阅读(64) 评论(0) 推荐(1)
摘要: EnTT信号系统 问题是如何产生的?我打死了一个敌人,可能会牵扯到很多东西,比如需要播放敌人的死亡动画,需要播放音效,需要更新得分,需要掉落道具,那么这么多事件难道都写在敌人击杀的那块代码中吗?这将会形成一个高度耦合的函数,这不是一种好的处理方法。 这里我们学习EnTT的信号/事件机制,用"发布事件 阅读全文
posted @ 2026-03-18 19:25 wenyiGamecpp 阅读(266) 评论(0) 推荐(1)
摘要: EnTT基础 目标: 了解三件套:entt::registry / entt::entity / component 学会用entt::view遍历"符合组件条件"的实体集合 了解entt::hashed_string(哈希字符串)的用途与常见问题 简单了解registry.ctx()是什么 设计思 阅读全文
posted @ 2026-03-16 21:32 wenyiGamecpp 阅读(439) 评论(0) 推荐(0)
摘要: 不同场景下的函数传参方式推荐 需要存储/赋值(setter,构造函数),推荐使用 按值传递 + std::move;代码最简洁,自动优化左值和右值,几乎无性能损失,是现代C++惯用手法 #include <string> class Person { private: std::string m_n 阅读全文
posted @ 2026-03-15 20:38 wenyiGamecpp 阅读(18) 评论(0) 推荐(0)
摘要: 最后一章了,需要完成失败和胜利的场景,也就是结束场景 结束场景 如果玩家胜利了,显示YOU WIN!,失败了则显示YOU DIED!;显示得分信息,历史最高分,提供操作选项,重新开始或是返回主菜单。 第一部分:EndScene 实现 该场景需要根据游戏结果,向玩家显示不同的信息,并提供"重新开始"或 阅读全文
posted @ 2026-03-15 10:43 wenyiGamecpp 阅读(40) 评论(0) 推荐(0)
摘要: 问题概述 需要完成游戏暂停功能 因为之前的暂停效果是在游戏场景上加一个菜单场景,这样场景管理器会只更新栈顶的场景,所以看上去游戏世界就好像停止了 这章节引入了一个新的概念:全局游戏状态(Game State) 核心思想: 引入GameState管理游戏状态 集成到Context全局访问 条件式更新物 阅读全文
posted @ 2026-03-14 20:21 wenyiGamecpp 阅读(33) 评论(0) 推荐(0)
摘要: 问题概述 这节完成标题场景,也就是主菜单(Title Scene) 我们的游戏应该首先进入主菜单,然后有四个按钮,开始新游戏,加载游戏,帮助,退出。 第一部分:调整游戏入口 首先,我们的GameApp从TitleScene启动。 我们需要调整GameApp中的初始化创建。 // ... #inclu 阅读全文
posted @ 2026-03-14 13:26 wenyiGamecpp 阅读(22) 评论(0) 推荐(0)