从0开发游戏引擎之引擎2D基类CUI类实现

简介: 从0开发游戏引擎之引擎2D基类CUI类实现

CUI类实现了监听事件和事件派发处理。这个没什么难的,所以就直接贴代码了!


老规矩下面贴出来完整代码:


CUI.h代码实现


#pragma once
#include "UI_Manage.h"
namespace U2D
{
  struct Event
  {
    enum TYPE
    {
      MOUSE_UP,
    }type;
    event_selector listener_event; //事件监听
  };
  class CUI :public CNode
  {
    //friend class CTitleScene;
    friend class CUI_Manage;
  protected:
    CPicture texture;
    char name[50];
    Vector2 cornerPoint[4];
    list<Event> event_list; //事件监听列表
    void sendEvent(Event::TYPE e);//分发消息
  public:
    CUI();
    void setName(char *name) { strcpy(this->name, name); }
    char *getName() { return this->name; }
    virtual void draw() {};
    virtual void drawDebug() {};
    void addEventListener(Event::TYPE e, event_selector fun_event);
    virtual bool MsgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { return false; }
    virtual ~CUI();
  };
}


CUI.cpp 代码实现


这个没什么难的,所以就直接贴代码了,这个类因为是个基类,只有.h没有.cpp文件。
Ui.h代码实现
#pragma once
#include "UI_Manage.h"
namespace U2D
{
  struct Event
  {
    enum TYPE
    {
      MOUSE_UP,
    }type;
    event_selector listener_event; //事件监听
  };
  class CUI :public CNode
  {
    //friend class CTitleScene;
    friend class CUI_Manage;
  protected:
    CPicture texture;
    char name[50];
    Vector2 cornerPoint[4];
    list<Event> event_list; //事件监听列表
    void sendEvent(Event::TYPE e);//分发消息
  public:
    CUI();
    void setName(char *name) { strcpy(this->name, name); }
    char *getName() { return this->name; }
    virtual void draw() {};
    virtual void drawDebug() {};
    void addEventListener(Event::TYPE e, event_selector fun_event);
    virtual bool MsgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { return false; }
    virtual ~CUI();
  };
}
[点击并拖拽以移动]
Ui.cpp 代码实现
    #include "Engine.h"
    namespace U2D
    {
        CUI::CUI()
        {
            memset(name, 0, 50);
            memset(cornerPoint, 0, sizeof(Vector2) * 4);
        }
        void CUI::addEventListener(Event::TYPE e, event_selector fun_event)
        {
            Event eve;
            eve.type = e;
            eve.listener_event = fun_event;
            event_list.push_back(eve);
        }
        void CUI::sendEvent(Event::TYPE e)
        {
            list<Event>::iterator iter;
            for (iter = event_list.begin(); iter != event_list.end(); iter++)
            {
                if (iter->type == e)//如果发来的消息和我们想要的消息一致就执行回调函数,比如传入的消息是mouse_down,我们传入的(也就是我们想要的状态)也为down,这个时候就会执行这个回调函数里面的内容
                {
                    if (parent == NULL)
                        (this->*(iter->listener_event))(this);
                    else
                        (parent->*(iter->listener_event))(this);
                }
            }
        }
        CUI::~CUI()
        {
        }
    }
相关文章
|
机器学习/深度学习 人工智能 搜索推荐
协同过滤算法:个性化推荐的艺术与科学
协同过滤算法:个性化推荐的艺术与科学
协同过滤算法:个性化推荐的艺术与科学
|
负载均衡 网络协议 安全
slb选择监听协议和端口
阿里云SLB中,监听协议(TCP、HTTP、HTTPS)与端口(80、443等)决定客户端请求的处理方式。TCP适用于纯TCP或自处理HTTP的场景,HTTP用于智能调度Web服务,HTTPS提供安全的HTTP传输。监听端口通常匹配应用标准,如80 for HTTP,443 for HTTPS。配置时,可考虑HTTPS重定向和传递`X-Forwarded-Proto`头以识别请求来源。选择应基于业务需求和安全考虑。
769 3
|
7月前
|
SQL 存储 关系型数据库
MySQL选错索引了怎么办?
本文探讨了MySQL中因索引选择不当导致查询性能下降的问题。通过创建包含10万行数据的表并插入数据,分析了一条简单SQL语句在不同场景下的执行情况。实验表明,当数据频繁更新时,MySQL可能因统计信息不准确而选错索引,导致全表扫描。文章深入解析了优化器判断扫描行数的机制,指出基数统计误差是主要原因,并提供了通过`analyze table`重新统计索引信息的解决方法。
179 3
|
XML 安全 Java
SpringSecurity系列(三) Spring Security 表单登录
SpringSecurity系列(三) Spring Security 表单登录
320 0
|
10月前
|
Java Go 开发者
2023年终总结-一名23届毕业生的风雨秋招路
人生如巧克力,充满未知。23届大学生经历网课、封校后迎来秋招寒冬,笔者投递三百多家公司,最终收到三个Offer。签约中厂后,享受短暂的轻松时光。热爱编程,参加字节青训营,获技术提升与人脉积累。毕业旅行至云南时突遇毁约,但家人支持下继续前行。重新求职后选择深圳工作,入职半年收获良多。展望2024,立下多个目标,愿新的一年实现愿望。
177 4
|
监控 物联网 数据挖掘
云上智能工厂:重塑制造业的未来生态
云上智能工厂将不断提升智能化水平,包括生产流程的自动化、管理决策的智能化等方面。这将进一步提高生产效率和质量,降低成本和浪费。 绿色可持续发展:随着全球对环保问题的日益关注,云上智能工厂将更加注重绿色生产和可持续发展。通过优化生产流程、更新节能设备等方式降低能耗和排放,实现绿色生产目标。
|
消息中间件 安全 Java
在Spring Bean中,如何通过Java配置类定义Bean?
【4月更文挑战第30天】在Spring Bean中,如何通过Java配置类定义Bean?
240 1
|
Rust 安全 编译器
深入Rust的所有权系统:理解变量的所有权
本文详细探讨了Rust编程语言中所有权系统的核心概念,包括变量的所有权、生命周期、借用规则和内存安全。通过理解这些概念,我们能够编写出更加高效、安全和可维护的Rust代码。
|
安全 Java 数据库
SpringSecurity系列(二) Spring Security入门
SpringSecurity系列(二) Spring Security入门
255 1
|
JavaScript 数据可视化
datav和echarts一起使用时,在datav的组件里获取不到dom元素,导致无法渲染echarts
记录一个小问题,datav和echarts一起使用时,在datav的组件里获取不到dom元素
476 1