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

大流量网站解决访问量灰色关键词排名代做

大流量网站解决访问量,灰色关键词排名代做,郑州网站建设公司e00,网络营销实际上就是网上营销OpenGL笔记之事件驱动设计将相机控制类和应用程序类分离 —— 2024-10-02 下午 bilibili赵新政老师的教程看后笔记 code review! 文章目录 OpenGL笔记之事件驱动设计将相机控制类和应用程序类分离1.代码图片2.分析3.UML4.代码 1.代码图片 运行 Mouse button 1 pressed at (1…

OpenGL笔记之事件驱动设计将相机控制类和应用程序类分离

—— 2024-10-02 下午


在这里插入图片描述
bilibili赵新政老师的教程看后笔记

code review!

文章目录

  • OpenGL笔记之事件驱动设计将相机控制类和应用程序类分离
    • 1.代码图片
    • 2.分析
    • 3.UML
    • 4.代码

1.代码图片

在这里插入图片描述

运行

Mouse button 1 pressed at (100, 200)
Mouse dragged by (50, 50)
Key pressed: 65
Updating camera control

2.分析

类图:

Application
-cameraControl: CameraControl*
-mouseCallback: MouseCallback
-keyCallback: KeyCallback
+Application()
+setMouseCallback(MouseCallback)
+setKeyCallback(KeyCallback)
+triggerMouseEvent(MouseEvent)
+triggerKeyEvent(KeyEvent)
+run()
«interface»
CameraControl
+handleMouseEvent(MouseEvent)
+handleKeyEvent(KeyEvent)
+update()
SimpleCameraControl
-mousePressed: bool
-lastX: double
-lastY: double
-keys: map
+handleMouseEvent(MouseEvent)
+handleKeyEvent(KeyEvent)
+update()
MouseEvent
+x: int
+y: int
+button: int
+pressed: bool
KeyEvent
+key: int

上面的类图展示了代码中主要类的结构和关系:

  • Application 类包含一个 CameraControl 指针和事件回调函数指针,通过 setMouseCallbacksetKeyCallback 设置事件回调。
  • CameraControl 是一个抽象基类,定义了处理鼠标事件、键盘事件和更新的接口。
  • SimpleCameraControl 继承自 CameraControl,实现了具体的事件处理逻辑。
  • MouseEventKeyEvent 分别表示鼠标事件和键盘事件的数据结构。

事件处理流程图:

mouseCallback
keyCallback
鼠标/键盘事件
Application::triggerMouseEvent/triggerKeyEvent
onMouseEvent
onKeyEvent
SimpleCameraControl::handleMouseEvent
SimpleCameraControl::handleKeyEvent

事件处理流程如下:

  1. 应用程序触发鼠标或键盘事件
  2. 事件通过 Application::triggerMouseEventApplication::triggerKeyEvent 分发到对应的全局回调函数
  3. 回调函数 onMouseEventonKeyEvent 调用 SimpleCameraControl 的对应事件处理函数
  4. SimpleCameraControl 的事件处理函数根据事件数据进行相应的处理

主程序流程图:

main
创建Application对象
设置鼠标回调为onMouseEvent
设置键盘回调为onKeyEvent
调用Application::run
模拟触发鼠标事件
模拟触发键盘事件
调用CameraControl::update

主程序的流程如下:

  1. 创建 Application 对象
  2. 设置鼠标回调函数为 onMouseEvent
  3. 设置键盘回调函数为 onKeyEvent
  4. 调用 Application::run
    • 模拟触发鼠标事件
    • 模拟触发键盘事件
    • 调用 CameraControl::update 更新相机状态

3.UML

+------------------+
|  CameraControl   |  <<abstract>>
+------------------+
| +handleMouseEvent(MouseEvent) : void |
| +handleKeyEvent(KeyEvent) : void     |
| +update() : void                     |
+------------------+^||
+----------------------+
| SimpleCameraControl  |
+----------------------+
| -mousePressed : bool |
| -lastX : double      |
| -lastY : double      |
| -keys : map<int, bool> |
+----------------------+
| +handleMouseEvent(MouseEvent) : void |
| +handleKeyEvent(KeyEvent) : void     |
| +update() : void                     |
+----------------------++-------------------+
|    Application    |
+-------------------+
| -cameraControl : SimpleCameraControl*
| -mouseCallback : MouseCallback       |
| -keyCallback : KeyCallback           |
+-------------------+
| +setMouseCallback(MouseCallback) : void |
| +setKeyCallback(KeyCallback) : void     |
| +triggerMouseEvent(MouseEvent) : void   |
| +triggerKeyEvent(KeyEvent) : void       |
| +run() : void                           |
+-------------------++-------------------+
|    MouseEvent     |
+-------------------+
| +x : int          |
| +y : int          |
| +button : int     |
| +pressed : bool   |
+-------------------++-----------------+
|    KeyEvent     |
+-----------------+
| +key : int      |
+-----------------++--------------------+
|   Global Functions |
+--------------------+
| +onMouseEvent(MouseEvent) : void |
| +onKeyEvent(KeyEvent) : void     |
+--------------------+

4.代码

#include <iostream>
#include <map>// 定义事件类型
enum class EventType {MouseClick,KeyPress
};// 定义鼠标事件信息
struct MouseEvent {int x, y;int button;bool pressed;
};// 定义键盘事件信息
struct KeyEvent {int key;
};// 事件回调函数指针类型
using MouseCallback = void (*)(const MouseEvent&);
using KeyCallback = void (*)(const KeyEvent&);// 抽象相机控制器基类
class CameraControl {
public:virtual void handleMouseEvent(const MouseEvent& event) = 0;virtual void handleKeyEvent(const KeyEvent& event) = 0;virtual void update() = 0;
};// 一个简单的相机控制器实现
class SimpleCameraControl : public CameraControl {
public:void handleMouseEvent(const MouseEvent& event) override {if (event.pressed) {mousePressed = true;lastX = event.x;lastY = event.y;std::cout << "Mouse button " << event.button << " pressed at ("<< event.x << ", " << event.y << ")\n";} else {mousePressed = false;double deltaX = event.x - lastX;double deltaY = event.y - lastY;std::cout << "Mouse dragged by (" << deltaX << ", " << deltaY << ")\n";lastX = event.x;lastY = event.y;}}void handleKeyEvent(const KeyEvent& event) override {keys[event.key] = true;std::cout << "Key pressed: " << event.key << "\n";}void update() override {std::cout << "Updating camera control\n";}private:bool mousePressed = false;double lastX = 0.0, lastY = 0.0;std::map<int, bool> keys;
};// 应用程序类
class Application {
public:Application(): cameraControl(new SimpleCameraControl()) {}void setMouseCallback(MouseCallback callback) {mouseCallback = callback;}void setKeyCallback(KeyCallback callback) {keyCallback = callback;}void triggerMouseEvent(const MouseEvent& event) {if (mouseCallback) {mouseCallback(event);}}void triggerKeyEvent(const KeyEvent& event) {if (keyCallback) {keyCallback(event);}}void run() {// 模拟事件触发triggerMouseEvent(MouseEvent{100, 200, 1, true});triggerMouseEvent(MouseEvent{150, 250, 1, false});triggerKeyEvent(KeyEvent{65});// 更新相机控制cameraControl->update();}private:SimpleCameraControl* cameraControl;MouseCallback mouseCallback = nullptr;KeyCallback keyCallback = nullptr;
};// 全局函数
void onMouseEvent(const MouseEvent& event) {static SimpleCameraControl control;control.handleMouseEvent(event);
}void onKeyEvent(const KeyEvent& event) {static SimpleCameraControl control;control.handleKeyEvent(event);
}int main() {Application app;app.setMouseCallback(onMouseEvent);app.setKeyCallback(onKeyEvent);app.run();return 0;
}
http://www.hkea.cn/news/405819/

相关文章:

  • 企业网站建设公司排名深圳高端seo公司助力企业
  • 做网站套餐网站seo
  • 网站上的代码网页怎么做的下载百度软件
  • 网站功能模块建设搜狗推广
  • 网站做推广有用吗网站页面设计
  • 做简报的网站广州搜发网络科技有限公司
  • 南乐县住房和城乡建设局网站制作网站的步骤是什么
  • 金华做网站最专业的公司搜易网提供的技术服务
  • wordpress适合门户网站吗怎么营销自己的产品
  • 常用的网站类型有哪些seo优化专员编辑
  • 网站专题框架怎么做海阳seo排名
  • 手机网站代码下载黄页网站推广服务
  • 做网站前端多少钱在线bt种子
  • wordpress+模版+推荐专业网站seo推广
  • 浦项建设公司员工网站2023免费推广入口
  • 如何查询某个网站的设计公司最新推广注册app拿佣金
  • 八宝山做网站公司打广告
  • wordpress vip查看插件南宁seo费用服务
  • 建站之星模板怎么设置手机如何做网站
  • 上海公司网站制作价格西安百度关键词排名服务
  • 长沙网页制作开发公司aso优化方案
  • 深圳罗湖网站制作成人电脑基础培训班
  • 无锡网站制作咨询深圳网站设计十年乐云seo
  • 大连城市建设网站seo优化顾问服务阿亮
  • 福州 网站建设沈阳seo关键词排名优化软件
  • 做网站还要买服务器吗镇江seo
  • 专门做特价的网站优化排名案例
  • 网站建设的一些问题友链交易交易平台
  • 创业初期要建立公司的网站吗seo排名优化代理
  • 做网站全屏尺寸是多少钱站长工具查询系统