这个主要是应用在我前一篇博客里提到的脚本热加载功能。主要实现的功能检测文件夹内文件的变化(改变、新增、删除、重命名),当发现改变的时候通知lua重新加载脚本。基本上就是一个windows api的使用。实际应用中会有一些细节需要注意,比如我习惯使用sublime text编辑,而sublime text保存文件不是直接改变文件内容,而是新增一个文件。这些细节情况需要实际使用中微调。
代码如下:
#include "FileWatcher.h"
#include "cocos2d.h"
#include "CCLuaEngine.h"
using namespace cocos2d;
#ifdef WIN32
// 函数: WatchChanges(LPVOID lpParameter)
//
// 目的: 监控目录的程序
//
// 注释:主函数创建线程时制定了这个函数的入口
// 届时该子程序将自动启动执行。
// 备注:因为代码不全,看下面的代码时,主要参考红色的字体部分
static int lastChangeTime = 0;
void reloadGame()
{
int time = GetTickCount();
if (time - lastChangeTime <= 1000) {
// 忽略短时间内的重新加载请求
return;
}
Director::getInstance()->getScheduler()->performFunctionInCocosThread([