在Cocos2d中为精灵和位图字体标签共享相同的纹理图集

时间:2014-08-05 16:09:29

标签: cocos2d-iphone texturepacker bitmap-fonts

我有一堆共享相同纹理图集的精灵,比如这个

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"Atlas.plist"];
CCSprite *sprite1 = [CCSprite spriteWithSpriteFrameName:@"Star1.png"];
CCSprite *sprite2 = [CCSprite spriteWithSpriteFrameName:@"Star2.png"];
[self addChild:sprite1];
[self addChild:sprite2];

和一堆使用相同FNT字体的位图字体标签,如此

CCLabelBMFont *label1 = [CCLabelBMFont labelWithString:@"label1" fntFile:@"font.fnt"];
CCLabelBMFont * label2 = [CCLabelBMFont labelWithString:@"label2” fntFile:@"font.fnt"];
[self addChild: label1];
[self addChild: label2];

所有这些都在同一层

我想知道将font.png文件(由font.fnt使用)打包到纹理图集中,比如使用像texture packer这样的工具,会导致cocos2d使用相同的纹理图集来绘制标签和精灵

1 个答案:

答案 0 :(得分:0)

所以,我就这样做了:

我使用纹理打包器

font.png文件打包到Atlas.pvr文件中

然后使用Xcode我查找font.png

中指定的Atlas.plist图像的帧起源

enter image description here

然后使用以下bash脚本我将帧原点添加到.fnt文件中每个字形的坐标原点

#!/bin/bash

infile='testfont.fnt'
framex=258
framey=62

output=''
while ifs=$'\n' read -r line || [[ -n "$line" ]] ; do
if [[ $line =~ ^(.*x\ ?=\ ?)([0-9]*)(.*y\ ?=\ ?)([0-9]*)(.*)$ ]] ; then
    output=$output${BASH_REMATCH[1]}$((${BASH_REMATCH[2]}+framex))${BASH_REMATCH[3]}$((${BASH_REMATCH[4]}+framey))${BASH_REMATCH[5]}$'\n'
  else
    output=$output$line$'\n'
  fi
done < "$infile"

echo "$output"

然后在输出.fnt文件中,我将图像文件名从testfont.png更改为Atlas.pvr