HGE中文顯示最新修改 070717

2021-04-13 04:37:56 字數 4915 閱讀 5598

今天沒事就把hge中文的(hgefontcn)修了一下..

去除了一些不要的東西..

這樣使得記憶體占用小了一大節... 

以前用12號字要用15m左右的記憶體.

現在只需要9m了...

我直接貼**了...

原理去看我以前發的文章...

#pragma

once

#include 

"hge.h

"#include 

"hgesprite.h

"#include 

<

iostream

>

class

hgefontcn

;struct

fontcn_head

;struct

fontcn_frame

;public

:hgefontcn(

const

char

*filename);    

//根據字型檔案建立

~hgefontcn(

void

);void

render(

float

x, float

y, const

char

*string

);        

//繪製字串

void

printf(

float

x, float

y, const

char

*format, ...);    

//繪製格式字串

void

setcolor(dword col)        

//設定字型顏色

void

setz(

float

z)                    

//設定z緩衝

dword            getcolor() 

const

//獲得顏色

float

getz() 

const

//獲得z緩衝

float

getheight() 

const

//獲得字型高度

float

getcnwidth() 

const

float

getenwidth() 

const

void

setblendmode(

intblend)    

//設定混和模式

intgetblendmode() 

const

//獲得混和模式

float

getstringwidth(

const

char

*string

) const

;float

getstringheight(

const

char

*string

) const

;private

:static

hge*

hge;

hgesprite

*sprfont;    

//所有字模精靈    

fontcn_frame    fontframe[hz_h_max][hz_w_max];    

//所有字元

float

fcnwidth;       

//漢字寬度

float

fenwidth;       

//ascii寬度

float

fheight;        

//字元高度

char

txtbuffer[

512];    

//文字快取

};inline 

void

hgefontcn::fontcn_head::set(

char

*head, 

const

char

*file, dword ncol, dword nrow, byte nfwidth, byte nfheight)

inline 

void

hgefontcn::fontcn_frame::set(byte h, byte l, word fx, word fy)

#include 

"hgefontcn.h

"#include 

<

stdlib.h

>

#include 

<

stdio.h

>

hge*

hgefontcn::hge =0

;hgefontcn::

~hgefontcn(

void

)hgefontcn::hgefontcn(

const

char

*filename)

if(strcmp(fonthead.strhead,

"[fontcn]"))

std::

string

imgfilename(fonthead.imgfile);

fcnwidth =(

float

)fonthead.ifontw;

fenwidth 

=fcnwidth /2

+1;#ifndef _debug

fenwidth +=1

;#endif

fheight     =(

float

)fonthead.ifonth;

char

szfullimgfile[_max_path];

char

drive[_max_drive];

char

dir[_max_dir];

char

fname[_max_fname];

char

ext[_max_ext];            

_splitpath(filename, drive, dir, fname, ext );

sprintf(szfullimgfile,

"%s%s

", dir, imgfilename.c_str());

if((htexture 

=hge

->

texture_load(szfullimgfile)) ==0

)float

texw =(

float

)hge

->

texture_getwidth(htexture,

true

);float

texh =(

float

)hge

->

texture_getheight(htexture,

true

);sprfont 

=new

hgesprite(htexture, 0, 

0, texw, texh);

fontcn_frame    _frame;

while(!

feof(pfontfile))        

else

if(hz0 

==0xff

)else

continue

;            

fontframe[hz0][hz1] 

=_frame;

}fclose(pfontfile);    

setblendmode(blend_colormul 

|blend_alphablend 

|blend_nozwrite);

}void

hgefontcn::render(

float

x, float

y, const

char

*string

)else

if(hz0 

>=

hz_h_fix 

&&hz0 

<=

hz_h_end)

else

if(hz0 

>=

ascii_fix 

&&hz0 

<

ascii_end)

else

string++;

}}void

hgefontcn::printf(

float

x, float

y, const

char

*format, ...)

float

hgefontcn::getstringwidth(

const

char

*string

) const

byte hz0 =*

(string

++), hz1 =*

string;if

(hz0 

>=

hz_h_fix 

&&hz0 

<=

hz_h_end)

w +=

fcnwidth, 

string++;

else

w +=

fenwidth;

}return

max(tw, w);

}float

hgefontcn::getstringheight(

const

char

*string

) const

return

_h;}

怪的地方有乙個.release和debug版的gdi字型竟然不一樣..而且差別非常大.

HGE中文顯示最新修改 070717

天沒事就把hge中文的 hgefontcn 修了一下.去除了一些不要的東西.這樣使得記憶體占用小了一大節.以前用12號字要用15m左右的記憶體.現在只需要9m了.我直接貼 了.原理去看我以前發的文章.pragma once include hge.h include hgesprite.h incl...

乙個在HGE下顯示中文的簡單類

最近剛剛開始學習hge,發現hge不支援中文顯示,為了可以顯示中文就模仿hge中的hgefont類寫了乙個擴充套件的hgefontcn類,在寫hgefontcn時沒有從hgefont派生,而是直接寫的,雖然內部結構與實現方法一樣,但還是將內容重寫了一邊,因為有幾個地方是需要判斷字串是否是漢字。配合h...

centos 7修改中文顯示

首先檢視自己當前使用的語言包 root master1 echo lang en us.utf 8可以看出為en us,即英文。安裝最新的語言包 root master1 yum install kde l10n chinese檢視中文語言包是否存在 root master1 locale a gr...