【游戏引擎Easy2D】基于基础类型展开的监听器学习详解

这篇具有很好参考价值的文章主要介绍了【游戏引擎Easy2D】基于基础类型展开的监听器学习详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【游戏引擎Easy2D】基于基础类型展开的监听器学习详解


  easy2d 自定义事件,【C++游戏引擎】,c++,前端,游戏引擎,算法,开发语言

  • 🧛‍♂️iecne个人主页:点赞关注收藏评论支持哦~
  • 💡每天关注iecne的作品,一起进步
  • 👉本文收录专栏:【C++游戏引擎】
  • 🐳希望大家多多支持🥰一起进步呀!

往后看免费提供安装包

✨前言

哈喽大家好,我是iecne,本期为大家带来的是CPP/C++【游戏引擎Easy2D】一篇打通引擎顶级类型,Listener。包教包会,快来看看吧!

引擎支持 Visual Studio 2013 及以上版本,如果你使用的是较低版本的 VS,那么你需要考虑一下更新你的编译器了

任务描述

如何根据据【游戏引擎Easy2D】一文搞懂丨从各种角度详解分析监听器Listener + C++实现

本实践旨在通过多个代码的案列,让大家理解和掌握如何使用Easy2D引擎来将这四个基础类型详细的解释并且会运用

easy2d 自定义事件,【C++游戏引擎】,c++,前端,游戏引擎,算法,开发语言


目录

【游戏引擎Easy2D】从各种角度详解分析监听器Listener + C++实现

往后看免费提供安装包

✨前言

任务描述

Easy2D导读

安装 Easy2D

零.Listener 监听器

一.鼠标按下监听例子

二.监听器的作用

三.监听器的启动和暂停

四.监听器的添加和移除 

五.自定义事件

六.关于命名

总结


Easy2D导读

对于编程而言,初学者最需要的不是技能,而是成就感。

如果你喜欢用 C/C++ 编写自己的小游戏,那么 Easy2D 将是个不错的选择,它大大简化了游戏制作过程,可以帮助你快速开发 Windows 上的 2D 小游戏。

它的特点和它的名字一样,Everything is Easy!


安装 Easy2D

使用简易安装器

运行里面的 install.bat 文件进行安装。

点击此链接进行下载(纯免费,给官方搞成了VIP) 

下载点击这里,记得四连哦

安装程序会检测您已经安装的 Visual Studio 版本,并根据您的选择将对应库文件解压至 VS 库目录下。

Easy2D 不支持 VS2012 及以下的版本(包括 VC6.0),如果你使用的是低版本的 VS,那你需要尝试一下新版的 Visual Studio 了。

安装环境
操作系统:Windows 7 及以上操作系统。
编译环境:Visual Studio 2013 (x86 & x64) 及以上版本。


零.Listener 监听器

Listener 监听器类用于监听某个事件的发生,并作出相应的处理。


一.鼠标按下监听例子

例如,下面的代码创建了一个监听鼠标按下的事件:

// 监听器的回调函数
auto callback = [](Event* evt)
{
    // 判断事件类型是否是鼠标按下
    if (evt->type == Event::MouseDown)
    {
        // 鼠标按下事件发生了
        // 作出相应处理
    }
};

// 创建监听器
auto lis = gcnew Listener(callback);
// 让某个节点使用这个监听器
node->addListener(lis);

上面的代码也许晦涩难懂,简单来说,当一个事件发生时,事件会逐一发送给每一个节点(node),节点再将事件转发给监听器,监听器收到事件时会调用回调函数(callback)来处理这个事件。//官方语言


二.监听器的作用

监听器可以监听到的事件有以下几种:

通过监听一下功能,做出判断

// 事件类型枚举
enum Type
{
    MouseMove,  // 鼠标移动
    MouseDown,  // 鼠标按下
    MouseUp,    // 鼠标抬起
    MouseWheel, // 鼠标滚轮滑动
    KeyDown,    // 按键按下
    KeyUp       // 按键抬起
};

下面的回调函数示例给出了每种类型事件的处理方式:

这个说实话很难,实际用处不大,各位了解一下即可

// 监听器的回调函数
// 展示了所有事件的处理方式
auto callback = [](Event* evt)
{
    if (evt->type == Event::MouseMove)
    {
        // 鼠标移动事件发生了
        // 将事件类型转换为事件的实际类型
        auto mouseEvt = (MouseMoveEvent*)evt;
        mouseEvt->x;    // 鼠标 x 坐标
        mouseEvt->y;    // 鼠标 y 坐标
    }
    else if (evt->type == Event::MouseDown)
    {
        // 鼠标按下事件发生了
        // 将事件类型转换为事件的实际类型
        auto mouseEvt = (MouseDownEvent*)evt;
        mouseEvt->x;        // 鼠标 x 坐标
        mouseEvt->y;        // 鼠标 y 坐标
        mouseEvt->button;   // 鼠标按键键值 MouseCode
    }
    else if (evt->type == Event::MouseUp)
    {
        // 鼠标抬起事件发生了
        // 将事件类型转换为事件的实际类型
        auto mouseEvt = (MouseUpEvent*)evt;
        mouseEvt->x;        // 鼠标 x 坐标
        mouseEvt->y;        // 鼠标 y 坐标
        mouseEvt->button;   // 鼠标按键键值 MouseCode
    }
    else if (evt->type == Event::MouseWheel)
    {
        // 鼠标滚轮滑动事件发生了
        // 将事件类型转换为事件的实际类型
        auto mouseEvt = (MouseWheelEvent*)evt;
        mouseEvt->x;        // 鼠标 x 坐标
        mouseEvt->y;        // 鼠标 y 坐标
        mouseEvt->delta;    // 鼠标滚轮滑动幅度
    }
    else if (evt->type == Event::KeyDown)
    {
        // 键盘按下事件发生了
        // 将事件类型转换为事件的实际类型
        auto keyEvt = (KeyDownEvent*)evt;
        keyEvt->key;    // 键盘按键键值 KeyCode
        keyEvt->count;  // 按键触发次数
    }
    else if (evt->type == Event::KeyUp)
    {
        // 键盘抬起事件发生了
        // 将事件类型转换为事件的实际类型
        auto keyEvt = (KeyUpEvent*)evt;
        keyEvt->key;    // 键盘按键键值 KeyCode
        keyEvt->count;  // 按键触发次数
    }
};

三.监听器的启动和暂停

创建监听器后,可以调用 start  stop 函数启动和暂停一个监听器

这个类似于Game::start……

auto lis = gcnew Listener();
// 启动监听器(默认就是启动状态)
lis->start();
// 暂停监听器
lis->stop();

四.监听器的添加和移除 

创建监听器后,需要将其添加到节点上,才可以接收发送到该节点的事件:

auto lis = gcnew Listener();
// 添加监听器
node->addListener(lis);
// 移除监听器
node->removeListener(lis);

监听器可以有名字,通过名字可以启动、暂停、移除指定的监听器

auto lis = gcnew Listener();
node->addListener(lis);

// 设置监听器的名称
lis->setName(L"my_listener");
// 启动名称为 my_listener 的监听器
node->startListener(L"my_listener");
// 暂停名称为 my_listener 的监听器
node->stopListener(L"my_listener");
// 移除名称为 my_listener 的监听器
node->removeListener(L"my_listener");

也可以启动、暂停、移除一个节点上的所有监听器

// 启动所有监听器
node->startAllListeners();
// 暂停所有监听器
node->stopAllListeners();
// 移除所有监听器
node->removeAllListeners();

这部分背的很多,但是大可不必,收藏文章吃灰,用到的时候拿出来就好了 


五.自定义事件

这里我们把标准的拿过来,因为博主没看懂…………

太菜了,看懂的评论区留言

出了上面几种预先定义的事件,用户也可以自己定义事件。

下面的代码展示了如何创建自定义的事件:

// 自定义事件类型
enum MyEventType
{
    // 第一个类型,为预定义事件类型最后一个值 + 1
    First = Event::Type::Last + 1
};

// 自定义事件
struct MyEvent
	: public Event
{
    // 自定义事件的类型为 First
    MyEvent() : Event(MyEventType::First) {}

    // 自定义事件的成员变量
    int value = 0;
};

使用下面的代码将自定义事件分发给节点及其所有子节点:

// 创建自定义事件
MyEvent* evt = gcnew MyEvent;
// 设置自定义事件的成员变量
evt->value = 3;
// 分发该事件,事件会发送给节点及其所有子节点
node->dispatch(evt);

 在监听器中处理自定义事件:

// 回调函数处理
auto callback = [](Event* evt)
{
    // 判断事件类型是否是鼠标按下
    if (evt->type == Event::MouseDown)
    {
        // 自定义事件发生了
        // 将事件类型转换为事件的实际类型
        auto myEvt = (MyEvent*)evt;
        myEvt->value;   // 获取自定义事件的成员变量
    }
};

六.关于命名

Easy2D 按照以下规律命名函数:

  • 小驼峰式命名法则,第一个单词小写,后面的单词首字母大写,如Window::setTitle
  • 所有函数均按照动词+名语形式命名,如Logger::showConsole
  • 获取对象的属性值:get+属性名,如Node::getWidth
  • 修改对象的属性值:set+属性名,如Node::setPos
  • 获取对象的状态(bool值):is+状态名,如Node::isVisiable

总结

 本节课主要是讲解了Easy2D引擎实现的教程,至此该课示例的思想博主已经真真切切彻彻底底分享完了,相信大家对这个逻辑有了一定的理解,大家可以自己动手敲敲代码,感受一下,包教包会。若有任何侵权和不妥之处,请私信于我,定积极配合处理,看到必回!!!

帅的人已然点赞收藏关注,而丑的人还在犹豫,被犹豫了,快三连吧!

原创不易,还希望各位大佬支持一下

点赞,你的认可是我创作的动力!

收藏,你的青睐是我努力的方向!

评论,你的意见是我进步的财富!

easy2d 自定义事件,【C++游戏引擎】,c++,前端,游戏引擎,算法,开发语言


感谢每一个观看本篇文章的朋友,更多精彩敬请期待:

iecne的博客_CSDN博客-C++领域博主

文章存在借鉴,如有侵权请联系修改删除!easy2d 自定义事件,【C++游戏引擎】,c++,前端,游戏引擎,算法,开发语言文章来源地址https://www.toymoban.com/news/detail-798096.html

到了这里,关于【游戏引擎Easy2D】基于基础类型展开的监听器学习详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Easy Rules规则引擎(1-基础篇)

    最近团队在做一些 Visa 、 Master 卡的交易风控,运营团队提供了一些交易风控的规则,比如针对卡号MCC设置单笔交易限额,24小时交易限额,72小时交易限额等等,还有触发风控规则是否拦截交易还是只发告警邮件等等等。 虽然写各种条件判断也能实现,但是随着后面规则增加

    2024年02月12日
    浏览(41)
  • 规则引擎入门-基于easy-rules

    描述一个简单的处理: 基于一堆现实情况,运用规则引擎、经过处理得到对应的结果,然后再据此做后续的事情 。 fact: 事实,已有的现实情况,即输入信息 rules: 规则集合,由一系列规则组成,可能有不同的规则排列 rule: 规则,包含基本的判断条件和条件符合要做的动作。

    2024年02月07日
    浏览(43)
  • 规则引擎架构-基于easy-rules

    描述一个简单的处理: 基于一堆现实情况,运用规则引擎、经过处理得到对应的结果,然后再据此做后续的事情 。 fact: 事实,已有的现实情况,即输入信息 rules: 规则集合,由一系列规则组成,可能有不同的规则排列 rule: 规则,包含基本的判断条件和条件符合要做的动作。

    2024年02月08日
    浏览(51)
  • 基于Stable Diffusion的2D游戏关卡生成【实战】

    接下来的几篇文章将与常规主题有所不同(这是在从事通用机器人技术的职业中吸取的教训)。 相反,我决定利用我的一些新空闲时间 1 边做边学,并使用所有酷孩子都在谈论的一些很酷的新 ML。 推荐:用 NSDT设计器 快速搭建可编程3D场景。 我的项目是制作一个 2D 平台游戏

    2024年02月11日
    浏览(34)
  • 【cocos 2d微信小游戏开发教程】基础使用笔记分享(一)

    开发文档地址 https://docs.cocos.com/creator/2.4/manual/zh/ 挂载脚步 右键新建脚本 脚本解释 把类名和脚本名改为一致 允许其他脚本调用 text优先使用面板的值,property去掉则不在面板上显示 打印输出 生命周期函数解释 节点的使用 预设体 拖拽新增预设体 用代码渲染预设体 脚本内容

    2024年02月07日
    浏览(66)
  • Games104现代游戏引擎笔记 网络游戏架构基础

    挑战1:网络同步 挑战2:是网络的可靠性,包括应对网络的延迟,丢包和掉线 挑战3: 反作弊和安全系统,因为网络游戏的本质是经济系统 挑战4:多样性(不同设备,不同服务器),在不停服的情况下热更新 挑战5:大量人数时对高并发,高操作的要求 Socket编程,通过接口,确认好相

    2024年02月08日
    浏览(59)
  • 【GAMES-104现代游戏引擎】4、引擎渲染基础(渲染基础数据、全局光照、PBR、阴影)

    游戏渲染的挑战 一个场景包含成千上万的GO需要的材质、shader、效果都不尽相同,因此 复杂度极高 当代各种硬件的适配难度高,硬件架构一直在变化 高帧率、高分辨率的要求下,使得绘制算法绘制一帧的时间越来越短, 算法效率要求高 绘制系统可以100%的使用显卡,但CPU只

    2023年04月09日
    浏览(50)
  • 【虚幻引擎UE】UE4/UE5 基于2D屏幕坐标获取场景3D坐标 射线检测(蓝图/C++)

    射线检测(Ray Casting) 是一种计算机图形和计算机图形学中的基本技术,用于检测光线或射线是否与三维场景中的物体相交,以确定相交点的位置和其他相关信息。射线检测通常用于实现各种交互功能、渲染效果和物理模拟,包括但不限于鼠标拾取、光线追踪、碰撞检测和物

    2024年02月07日
    浏览(121)
  • Games104现代游戏引擎笔记 基础ai

    游戏AI navigation(导航系统) 地图的表达形式, 寻路,路径优化 Map representation: 1.可行走区域(物理碰撞,跳跃距离,攀爬高度) 2.表达形式:waypoint networks(路点网络图),grid(网格),navigation mesh(寻路网格),sparse voxel octree(八叉树) Waypoint Networks: 设置关键点,在关键点之间通过

    2024年02月08日
    浏览(46)
  • 规则引擎----easy rules

    将复杂的if else判断剥离出来 2.1、引入POM 2.2、编写规则 2.2.1、注解 2.2.2、表达式 2.2.3 yml配置文件 2.2.4 组合规则 2.2.5 组合规则说明 类 说明 UnitRuleGroup 要么应用所有规则,要么不应用任何规则(AND逻辑) ActivationRuleGroup 它触发第一个适用规则,并忽略组中的其他规则(XOR逻辑

    2024年02月13日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包