Совместное использование одного и того же атласа текстур для спрайтов и меток растровых шрифтов в 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 использовать один и тот же атлас текстур для отрисовки меток и спрайтов.


person rraallvv    schedule 05.08.2014    source источник
comment
интересная мысль, но почему вы просто не попробовали это?   -  person LearnCocos2D    schedule 05.08.2014
comment
@LearnCocos2D Я попробовал это, но это не сработало из коробки, может быть, у кого-то есть обходной путь или патч. Если я найду решение, я опубликую его здесь.   -  person rraallvv    schedule 06.08.2014
comment
проверьте код инициализации cclabelbmfont, посмотрите, откуда он берет текстуру   -  person LearnCocos2D    schedule 06.08.2014
comment
@LearnCocos2D Он извлекает текстуру из кеша текстур, передавая имя файла изображения, [[CCTextureCache sharedTextureCache] addImage:_configuration.atlasName], где _configuration.atlasName — это файл, указанный в файле .fnt, я думаю, что могу обойти это, объединив два файла изображения Atlas.png и font.png в один большой изображение, упаковав font.png в Atlas.png в нужном месте и указав этот файл в файле .fnt   -  person rraallvv    schedule 06.08.2014


Ответы (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.

person rraallvv    schedule 06.08.2014