从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()
        {
        }
    }
相关文章
|
2月前
|
存储 Swift 开发者
Swift 是一种现代编程语言,支持面向对象编程(OOP),包括类、对象、继承、多态等核心概念
Swift 是一种现代编程语言,支持面向对象编程(OOP),包括类、对象、继承、多态等核心概念。通过这些特性,Swift 能够帮助开发者构建结构清晰、可维护性强的代码。本文介绍了 Swift 中 OOP 的基本概念、高级特性和实际应用,并通过一个简单的 `Car` 类示例展示了如何在 Swift 中实现面向对象编程。
32 1
|
3月前
|
JavaScript Java C++
ArkTS揭秘:如何在无‘类’的世界里,用组件与对象构建HarmonyOS应用的奇妙桥梁?
【10月更文挑战第19天】在鸿蒙系统的ArkTS开发中,类和对象的概念类似于传统OOP语言,但融入了声明式UI的特性。本文通过对比Java中的类和对象,详细介绍了如何在ArkTS中定义组件和实例化组件,并展示了实际开发中的应用示例。通过示例代码,读者可以清晰地理解ArkTS中类和对象的模拟方式及其灵活性。
123 1
|
7月前
|
程序员 C语言 C++
【C++语言】继承:类特性的扩展,重要的类复用!
【C++语言】继承:类特性的扩展,重要的类复用!
|
8月前
|
C++
C++示例(电脑组装)展现C++多态的优势以及虚函数抽象类的应用
C++示例(电脑组装)展现C++多态的优势以及虚函数抽象类的应用
Java接口:实现多重继承,促进代码复用与扩展的强大工具
Java接口:实现多重继承,促进代码复用与扩展的强大工具
197 0
|
Java 编译器 C++
【面向对象语言三大特性之 “继承”】(二)
【面向对象语言三大特性之 “继承”】(二)
65 0
|
安全 程序员
【面向对象语言三大特性之 “继承”】(一)
【面向对象语言三大特性之 “继承”】(一)
99 0
|
Java C++
面对对象三大特性:封装、继承、多态
面对对象三大特性:封装、继承、多态
|
Java
原生类
今天做笔试题时发现了一个概念,查阅了文档之后才明白,原生类的存在,慢慢学习慢慢进步吧! Java中,数据类型分为基本数据类型(或叫做原生类、内置类型)和引用数据类型。 Java不是纯的面向对象的语言,不纯的地方就是这些基本数据类型不是对象。当然初期Java的运行速度很慢,但是基本数据类型能在一定程度上改善性能。如果你想编写纯的面向对象的程序,用包装器类是取代基本数据类型就可以了。
107 0
|
Dart
[Flutter]足够入门的Dart语言系列之面向对象:类的定义详解、成员和实例使用
类表示的是分类,一类问题或事物,它是对具体或现实世界的抽象。比如动物类、犬科动物类、猫科动物类、房子类、数学类,类是具体事物的描述,它不是指具体的某个动物、某栋房子、某个数学题,而是对它们的概括...
364 0
[Flutter]足够入门的Dart语言系列之面向对象:类的定义详解、成员和实例使用

热门文章

最新文章