本文讨论优化多个进程在共用gfx嵌入字体的过程.
flash做界面有着天然的优势.随着gfx的发展也看到越来越多的游戏使用gfx做界面工作.
本项目组使用gfx也有几年时间了,这次接了个棋牌项目,很自然的就想使用flash作为界面.
与客户端项目不同的是单个棋牌游戏必须保持"身材瘦小".都能保持在5M以下是比较满意的.而且启动速度越快越好.
gfx使用的字体方案分为两种.
一种是系统字体.Windows字体或FT.
一种是嵌入字体即将整个字体库嵌入到swf文件当中,一个字体大概就在5M左右.粗体,斜体都算另一种字体.
gfx有着自己的字体渲染系统,在使用系统字体时会有明显的锯齿.对于一些应用来说是不可接受的.
但使用嵌入字体一是大小增加了近20M.共用文件又使游戏间产生了依赖关系.二是启动时读取一个大文件会影响启动速度.
于是想到使用共用内存来解决依赖关系并减少IO读取,提高启动速度.
Windows下合适的方案就是文件映射了.由于不存在写操作.所以不需要同步.整个过程非常简单.
fontfilemaping.h
#pragma once
#include <Windows.h>
#define FONTLIBMOVIE "fonts_cn.swf"
//为gfx本地化字库做内存共享
class FontFileMaping
{
public:
FontFileMaping();
~FontFileMaping();
bool CreateFontFileMaping( void );
void OpenFontFileMaping( void );