0

我有一堆共享相同纹理图集的精灵,像这样

[[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 使用相同的纹理图集来绘制标签和精灵

4

1 回答 1

0

所以,这就是我的做法:

我使用纹理打包器将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.pngAtlas.pvr

于 2014-08-06T04:19:38.807 回答