2012-12-12 32 views
0

我試圖設計一個矢量字體引擎,像Atari 1979中的矢量字體引擎。我有保存預定義字符集及其座標的問題,我不知道什麼是最佳數據 - 結構來保存這些多邊形,或者爲此設計一個類的最佳方式是什麼。這是我的審判,我一點也不舒服。設計矢量字體引擎

class Character 
{ 
public: 
     Character(); 

public: 
    int ascii; 
    int strokes; 
    std::vector<ci::Vec2i> points; 

}; 
void VectorFont::Init_Chars() 
{ 

    for (int i=0; i<1;i++) 
    { 
     Character char_A; 
     char_A.ascii = 65; 
     char_A.strokes = 6; 
     ci::Vec2i point_1 = ci::Vec2i(-6,-4); 
     ci::Vec2i point_2 = ci::Vec2i(0,8); 
     ci::Vec2i point_3 = ci::Vec2i(0,8); 
     ci::Vec2i point_4 = ci::Vec2i(6,-4); 
     ci::Vec2i point_5 = ci::Vec2i(4,0); 
     ci::Vec2i point_6 = ci::Vec2i(-4,0); 
     char_A.points.push_back(point_1); 
     char_A.points.push_back(point_2); 
     char_A.points.push_back(point_3); 
     char_A.points.push_back(point_4); 
     char_A.points.push_back(point_5); 
     char_A.points.push_back(point_6); 
     chars.push_back(char_A); 
    } 

} 

回答

0

由於這些人物有洞,你需要定義一個類Path

class Path 
{ 
    public: 
     std::vector<ci::Vec2i> points; 
     int orientation; // 1 for fill, 0 for hole. 
} 

一個Path是點和方位的集合。你的路徑應該被關閉,也就是說,第一點和最後一點是相同的。如果方向爲1,則表示填充黑色。如果它是0,則切一個洞。

然後你的Character類將有一個路徑的集合,這將是填充或漏洞。

以上只是描述了填充和孔上點的數據結構。必須寫入引擎才能將該數據結構轉換爲像素。這是另一個話題。

+0

對於像我這樣推動動畫的方式,你對此有何看法? – Andre

+0

你仍然會推動角色,但是你會在Path裏面而不是在VectorFont裏面。 VectorFont有字符。一個人物有道路。路徑有點。 –

+0

但你認爲它是一個很好的方法來爲每個字符寫相同的行+500嗎? – Andre