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

Другие вопросы по тегам