Совместное использование одного и того же текстурного атласа для спрайтов и меток растровых шрифтов в Cocos2d
У меня есть куча спрайтов, которые имеют один и тот же текстурный атлас, как этот
[[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
) в атлас текстуры, скажем, с помощью инструмента, подобного упаковщику текстур, заставит cocos2d использовать один и тот же атлас текстуры для рисования как меток, так и спрайтов
1 ответ
Итак, вот как я это сделал:
Я упаковал font.png
подать в Atlas.pvr
файл с использованием упаковщика текстур
Затем с Xcode я искал происхождение кадра font.png
изображение указано в Atlas.plist
Затем, используя следующий скрипт 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