源码解析 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
发布评论