fancy2D 源码解析 1 TestCpp

编程入门 行业动态 更新时间:2024-10-25 02:22:49

fancy2D <a href=https://www.elefans.com/category/jswz/34/1770099.html style=源码解析 1 TestCpp"/>

fancy2D 源码解析 1 TestCpp

fancy2D 源码解析 1 TestCpp

--------------------

如果你成功编译了项目并成功运行的话,单步执行,一切一定是从TestCpp工程中的Main.cpp开始的


--------------------

引用的项

// 如果需要引入fcyStream则必须在f2d之前引入
#include <fcyIO/fcyStream.h>
#include <fcyFile/fcyModelMeshFile.h>
#include <fcyFile/fcyModelMeshExporter.h>
#include <fcyOS/fcyDebug.h>
#include <fcyOS/fcyMultiThread.h>// UI库
#include <fcyUIBase/fuiPage.h>
#include <fcyUIBase/fuiFactory.h>
#include <fcyUIBase/fuiPropBlock.h>// f2d头文件
#include <f2d.h>#include <iostream>
#include <string>
#include <vector>using namespace std;

引用了fancy2D的大量头文件与C++标准库。作者同时提醒用户“如果需要引入fcyStream则必须在f2d之前引入”。


--------------------

main函数

接着从main函数开始看起

//int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int)
int main()
{
#ifdef _DEBUG_CrtSetDbgFlag(_CrtSetDbgFlag(_CRTDBG_REPORT_FLAG) | _CRTDBG_LEAK_CHECK_DF);// _CrtSetBreakAlloc(5351);
<pre name="code" class="cpp">#endifMyApp tApp;// system("pause");return 0;
}
 乍一看,什么?!main函数竟然如此简短?!没错,就是这么简短,接下来我们就来细细品味一下这一代码块。 

--------------------

注释的代码

在这12行代码中,一共有3行被注释的代码。

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int)

众所周知,WIN32的mian函数,在使用WinMain时并不会产生一个控制台窗口,而fancy2D中有大量自己定义的异常输出,故作者使用了main函数。若不需要控制台窗口了只需要将行注释放到int main()那行即可,十分方便。


_CrtSetBreakAlloc(5351);

在5351内存被分配时中断。大约是比较严重的问题,作者将次行代码注释而不是删除。

_CrtSetBreakAlloc的用法可参考:.aspx


system("pause");

众所周知,在次以上的代码运行完毕后暂停,而不是控制台的关闭。


--------------------

_CrtSetDbgFlag

我第一次看这代码时吃了个闭门羹,竟不知_CrtSetDbgFlag为何物,做什么用。

这个函数大致上可以解释为内存泄漏的检测

详细用法:=vs.60%29.aspx

_CrtSetDbgFlag(_CRTDBG_REPORT_FLAG)一句用来获取当前的状态,并用位操作符 | 添加_CRTDBG_LEAK_CHECK_DF状态,最终设置状态。

注:#ifdef _DEBUG使用的原因

由于_CrtSetDbgFlag只能在debug模式下使用,故作者定义在_DEBUG定义的情况(即debug模式下)下调用此函数。


--------------------

MyApp tApp

在Main.cpp中定义类的对象,因为一切都在MyApp类的构造函数中办好了,故只需这句语句。


--------------------

MyApp类

注:由于MyApp全部代码较长,不贴了。


MyApp公共继承自f2dEngineEventListener,其目的是为了重写接口OnUpdate与OnRender。

private:// 必要组件fcyRefPointer<f2dEngine> m_pEngine;f2dFileSys* m_pFileSys;f2dRenderer* m_pRenderer;f2dRenderDevice* m_pDev;f2dSoundSys* m_pSoundSys;// 渲染器fcyRefPointer<f2dGraphics2D> m_pGraph2D;// 测试用fuiResProviderImpl tProvider;fcyRefPointer<fuiPage> m_pRootUIPage;fcyRefPointer<f2dGeometryRenderer> m_pGRender;
成员如上所示。

大部分成员从字面意思就能知道是做什么的,然而这里有两处我乍一看也没弄懂的来分析一下。

--------------------

fcyRefPointer

这是fancy2D中定义的引用计数模板类,点击f12可以查看定义。

在这个模板类的定义中,作者重载了指针操作的一些操作符,与基本的引用计数方法。

注:这个类是线程安全的


--------------------

fuiResProviderImpl

fancy2D UI控件资源提供类


--------------------

showSelfInfo

打印fancy2D版本信息,本机cpu信息,显卡名称,分辨率,抗锯齿等级。通过阅读代码就可知。


--------------------

至此,TestCpp还剩下MyApp重写的OnUpdate与OnRender与其构造函数。


今天累了,昨晚没睡好。╯︿╰明天继续吧


未完待续












更多推荐

fancy2D 源码解析 1 TestCpp

本文发布于:2024-03-11 16:11:30,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1729356.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:源码   fancy2D   TestCpp

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!