在利用SDL开发程序时,由于是窗口程序,所以std::cout<<""<<std::endl都不知道输出到哪里去了。但有时为了跟踪程序的运行状态,需要打印代码运行时的一些信息,这时就需要一个方便使用的日志记录类。
要在文件中记录日志信息,不可避免的就要读写文件和获取系统时间,遗憾的是C++标准中没有这方面的库。这时就需要使用BOOST库,BOOST中提供了很方便的操作文件和时间的库。
前面第一节介绍的mingw里面包含了boost1.37,但没有包含编译好的动态库,需要我们自己手工编译,然后放到mingw中来,这里(http://public0821.iteye.com/blog/291163
)专门介绍了如何编译和使用boost库。由于我们已经有了boost的头文件,所以不需要它里面介绍的拷贝头文件那一步。
下面请看日志类的代码:
#ifndef SDLLOG_H_
#define SDLLOG_H_
#include <boost/filesystem.hpp>
#include <boost/filesystem/fstream.hpp>
namespace fs = boost::filesystem;
const std::string DEFAULT_LOG_FILE = "log.log";
class SDLLog
{
friend class SDL;
private:
/**
* bAppend 程序重启后,写日志时是追加在上次的后面还是先清空文件
*/
SDLLog(bool bAppend = true);
public:
virtual ~SDLLog();
public:
void info(std::string info);
private:
fs::ofstream file;
};
#endif /* SDLLOG_H_ */
#include "SDLLog.h"
#include <boost/date_time.hpp>
using namespace boost::filesystem;
SDLLog::SDLLog(bool bAppend)
{
fs::path p( DEFAULT_LOG_FILE);
if(!bAppend)
{
fs::remove(p);
}
//std::ios_base::app表示每次写文件都是追加在后面
file.open(p, std::ios_base::app);
}
SDLLog::~SDLLog()
{
file.close();
}
void SDLLog::info(std::string info)
{
using namespace boost::posix_time;
ptime now = second_clock::local_time();
file << "[INFO]" << to_iso_extended_string(now.date())
<<' '<<to_simple_string(now.time_of_day())
<<" "<<info <<std::endl;
}
代码比较简单,所以这里不做解释。使用时的代码为:SDL::log()->info("测试");最后写在文件中的日志格式为:[INFO]2008-12-15 19:40:40 测试
由于用到了boost的filesystem和datetime库,需要在链接的地方指定连接文件名称,如下图
附件中提供了这里用到的BOOST动态库和LIB文件,对于不想自己编译BOOST库的朋友来说,下载附件中的文件然后放到mingw的相应目下下就可以了,本节完整的源代码将在后面教程中给出。
- 大小: 52.4 KB
分享到:
相关推荐
【压缩包子文件的文件名称列表】"SDL入门教程.pdf":这个PDF文件很可能是教程的主要内容,包含了SDL的基本概念、安装指南、API介绍、以及如何使用SDL构建简单游戏的步骤。这份文档可能会涵盖以下主题: 1. **SDL...
【标题】 SDL游戏开发教程11(扫雷游戏实现) 在本教程中,我们将探讨如何使用Simple DirectMedia Layer (SDL)库来实现经典的扫雷游戏。SDL是一个跨平台的开发库,专门用于处理图形、音频和输入设备,是游戏开发中...
总结来说,"SDL游戏开发教程04(C++封装SDL)"着重讲解了如何在C++中以面向对象的方式整合和管理SDL库,以实现更高效、模块化的游戏开发。通过封装,不仅可以提升代码质量,还能降低开发难度,便于团队协作和项目的...
这个“SDL游戏开发经典教程03源代码”是针对初学者的一个优秀资源,它帮助理解如何利用SDL进行事件驱动编程。 事件驱动编程是一种编程范式,其中程序的执行流由外部事件来决定。在游戏开发中,这种模型非常常见,...
【标题】 SDL游戏开发教程09(代码迁移到VC8) 在游戏开发领域,Simple DirectMedia Layer (SDL) 是一个广泛使用的开源库,它提供了一种跨平台的方式来处理图形、音频、输入设备等。本教程将指导你如何将已有的SDL...
翻译版》是一份专为初学者设计的游戏开发教程,由知名游戏开发资源提供者lazyfoo的原版教程翻译而来,紫翼魔王负责了中文版的翻译工作,使得国内的学习者能够更加方便地理解和掌握SDL(Simple DirectMedia Layer)库...
在本篇“SDL游戏开发教程10(场景管理器)”中,我们将深入探讨如何在游戏开发中有效地管理和切换不同的游戏场景。SDL(Simple DirectMedia Layer)是一个跨平台的库,用于处理图形、音频和输入设备,是创建2D游戏的...
在游戏开发领域,Simple DirectMedia Layer (SDL) 是一个广泛使用的开源跨平台开发库,它为创建多媒体应用和游戏提供了丰富的功能。"SDL游戏开发经典教程01源代码"是针对初学者的一份宝贵资源,旨在帮助开发者了解并...
在【标题】"SDL开发的小游戏"中,我们可以推断这是一个使用SDL库开发的简单游戏项目。SDL库因其高效、灵活和易于上手的特点,深受独立开发者和小型团队的喜爱,用于创建各种类型的游戏,从小型的2D游戏到复杂的3D...
- **教程风格**:教程采取了一种实用主义的写作方式,注重介绍如何有效地利用SDL的核心功能来创建游戏,而不是深入探讨每个技术细节。这样做的目的是确保读者能够快速上手并创作出实际的作品。 - **资源推荐**:作者...
SDL是一个跨平台的多媒体库,主要用于开发图形、音频和输入等游戏相关的功能。在这个教程中,我们将使用`SDL_rotozoom`库来实现图像的动态旋转和缩放效果。 `SDL_rotozoom`是一个扩展库,它提供了在SDL中对表面进行...
本教程主要针对的是Simple DirectMedia Layer(SDL)1.2版本,这是一个跨平台的多媒体库,广泛应用于游戏开发、图形界面设计和其他需要处理图形、音频和输入设备的软件开发中。SDL提供了一个相对低级别的接口,让...
综上所述,这个资源对于使用SDL开发游戏或多媒体应用的程序员来说非常宝贵,它提供了全面的库文件和头文件,覆盖了32位和64位系统,确保了在不同环境下的兼容性和可用性。通过这些文件,开发者可以轻松地将SDL集成到...
**SDL(Simple DirectMedia Layer)** 是一个跨平台的开源开发库,主要用于处理图形、音频、输入设备等多媒体任务,尤其适用于游戏开发和多媒体应用程序。它提供了一个抽象层,使得开发者可以编写一次代码,然后在...
综上所述,SDL作为一款功能强大且易于使用的多媒体库,为游戏开发提供了坚实的基础。无论是对于想要入门的初学者还是寻求高效开发的专业开发者而言,SDL都是一款值得深入了解和利用的工具。通过掌握SDL的核心概念和...
**SDL(Simple DirectMedia Layer)** 是一个开源的跨平台多媒体开发库,广泛应用于游戏开发、图形用户界面构建以及多媒体应用。它为开发者提供了一种简单而直接的方式来处理硬件加速的图形、音频和输入设备,使得...
开发者可以下载这个版本的库文件,将其与他们的项目链接,以利用`SDL_image`的功能。 在使用`SDL`和`SDL_image`进行Windows开发时,开发者需要注意以下关键知识点: 1. **安装和配置**:首先,需要下载并安装`SDL`...
在本教程中,我们将深入探讨如何使用SDL库在游戏开发中显示文字和其他格式的图片。SDL(Simple DirectMedia Layer)是一个跨平台的开发库,它为游戏和其他多媒体应用提供了底层的图形、音频和输入功能。这个教程适用...