【问题标题】:Sharing the same texture atlas for sprites and bitmap font labels in Cocos2dCocos2d 中的精灵和位图字体标签共享相同的纹理图集
【发布时间】:2014-08-05 16:09:29
【问题描述】:

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

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

【问题讨论】:

  • 有趣的想法,但您为什么不尝试一下呢?
  • @LearnCocos2D 我试过了,但它不能开箱即用,也许有人有解决方法或补丁。如果我找到解决方案,我会在这里发布。
  • 检查 cclabelbmfont 初始化代码,看看它从哪里获取纹理
  • @LearnCocos2D 它通过图像文件名[[CCTextureCache sharedTextureCache] addImage:_configuration.atlasName] 从纹理缓存中检索纹理,其中_configuration.atlasName 是.fnt 文件指定的文件,我想我可以通过合并两者来解决这个问题通过将 font.png 打包到 Atlas.png 中的正确位置并在 .fnt 文件中指定该文件,将图像文件 Atlas.png 和 font.png 合并为一张大图像

标签: cocos2d-iphone texturepacker bitmap-fonts


【解决方案1】:

所以,我就是这样做的:

我使用纹理打包器将font.png 文件打包到Atlas.pvr 文件中

然后我用 Xcode 寻找在Atlas.plist 中指定的font.png 图像的帧原点

然后使用以下 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

【讨论】:

    猜你喜欢
    • 2013-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多