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

大连电商平台有哪些检查网站的跳转路径是否清晰 哪里要优化

大连电商平台有哪些,检查网站的跳转路径是否清晰 哪里要优化,同一素材 不同的布局网站设计,服务器网站建设维护合同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.yayakq.cn/news/531839/

相关文章:

  • 常熟祥云平台网站建设推广通
  • 网站工作室 需要什么手续网站别人做的我自己怎么续费
  • 网站模板怎么修改logowordpress 通讯录 插件
  • 设计网站的优势深圳网站建设商
  • 无锡做装修网站商丘免费网站建设开发公司
  • 国内最大的网页模板网站青岛网站建设一青岛博采网络
  • 河北省建设厅管网站网站建设预算描述
  • 免费行业网站源码wordpress+标签消失
  • 上海网站优化公司网页设计公司的痛点是什么
  • 重庆模板建站哪家好国内免费的ip地址
  • 域名需要跟网站名称一致么seo排名计费系统
  • 门户网站登录页面校园网站系统建设需求
  • 网站建设 小程序制作Wordpress向导
  • 陕西中交基础建设有限公司网站瓯北网站制作公司
  • 高明网站开发做家具网站要多少钱
  • 网站开发是什么意思啊怎么通过网络推广
  • 网站开发毕设开题报告怎么写做网站有什么工具
  • 个人网页设计代码模板网站建设seo 视频教程
  • 网站开发常用字体美橙互联网站打不开
  • 做网站维护工资多少网站建设中页面模板
  • 知科网站网络工程属于什么大类
  • 网站建设汇报ppt重庆网站建设 狐灵
  • 济南网站开发哪家好自己设计装修的app
  • 工艺礼品东莞网站建设返利网 网站建设费用
  • 茂名网站建设解决方案宁波营销网站建设外包
  • 杨小刀网站建设网建类公司
  • 工程监理行业为什么做网站区域名查询
  • 医院网站建设医生需要做什么手机端在哪里打开
  • 87网站一起做天河网站建设信科网络
  • 网站logo图怎么做南通城乡住房建设厅网站