美術在設計UI時,很多界面可能使用了數字圖片來展示一些效果,比如CD或者 x1/x2等,一般她們都會切成很多單張小的圖片,類似這樣
cocox2d-x中CCLabelAtlas支持直接從圖片中讀取文字,但先要將上面的圖片合並成到一張圖片中。
CCLabelAtlas *pLabelAtlas = CCLabelAtlas::labelWithString(“text”, “png’s path”, single font width, single font height, first char);
text - 需要顯示的文本內容
png’s path - 拼接后的png圖片路徑
width - 單個字符的寬度
height - 單個字符的高度
first char - 第一個起始字符,程序內部是依據ascii碼的順序進行偏移來截取字符的,如果某一位沒有相應的字符,也應該在png中預留該圖片的位置。
ascii碼表如下(查看詳情>>)
如果第一個字符為“0”,那么字符“9”的偏移量就是 width * (57 - 48)
最開始對Texture Packer工具不熟悉時,發現里面的圖片無法進行拖拽和自定義排序,就一直使用flash進行操作 - -!
設定好后台大小,然后一個字符建一個圖層,然后定位,最后導出
第一次、第二次這樣用,倒還好,第三次我就覺得非常之郁悶了,難道沒有工具了嗎?有點心不甘,又試了幾次Texture Packer,然后成功了!!!
合並的圖片,在里面不能人為的進行布局拖動,它是通過一些設置來控制的。比如這里,我們需要使用圖片的名稱進行控制(它是字符串比較,所以10.png 在 2.png之前,統一使用二位02.png、10.png就可以實現真正的排序)
Layout選項中,有一個Shape outlines選項,勾選后,就可以看到單張圖片的“占位”了
默認Border padding、Shape Padding為2,這個很坑爹..
總結一下注意事項:
1、算法選用 Basic(默認的算法為MaxRects);
2、使用名稱進行排序,升序;
3、設置默認的Border padding、Shape Padding為0;
4、取消裁剪(Crop、Trim);
5、勾選”Geometry”中的Allow free sizes;
6、選擇輸出(Output)選項中的,Image format,為RGBA4444,並選擇Dithering為 抖動 + 通道(FloydSteinberg + Alpha);
其它特殊的文字,使用CCLabelBMFont、CCLabelTTF也可以實現上述效果,但是CCLabelTTF效率很低一般都不會使用,下一篇將介紹CCLabelBMFont的相關工具(Hiero)及使用…
參考:
關於Hiero工具,網上已經有很多教程:
Cocos2d的字體生成軟件Hiero v2.0 - Bitmap Font Tool的一些問題
------------------------------------------------- 2014/07/23 補充 ------------------------------------------------
后來經過研究,發現設置按上圖的設置最為合適,上面單張圖片大小為w * h = 21 * 24px,設置后,給定的大小為 w * h = 23 * 26px,為什么這樣設置呢?
就是為了讀取指定位置的文字時,左、右都留有1像素的空白,不然像上圖中的4、5放大后,其實有部分重疊區域。放到游戲中看,就很容易看到黑邊之類的
如果有多張空白圖片,比如上圖:+ ~ 0/9中間隔着,-./四個ASCII碼,這里用四張空白圖替代。但注意一定要取消勾選“Enable auto alias”,不然就只能看到一個空白占位了,如下圖所示: