cocos2dx获得字体的宽高

Android:

1、在CCImage中添加下面的方法:

//头文件声明略。

cocos2d::CCSize CCImage::getStringSize(const char *text, const char * pFontName, int nSize)

{

JniMethodInfo minfo;

if (! JniHelper::getStaticMethodInfo(minfo, "org/cocos2dx/lib/Cocos2dxBitmap", "getFontSize",

"(Ljava/lang/String;Ljava/lang/String;I)[I"))

{

CCLOG("getStringSize %s %d: error to get methodInfo", __FILE__, __LINE__);

return CCSizeMake(nSize, nSize);

}

jstring jmsg1 = minfo.env->NewStringUTF(text);

jstring jmsg2 = minfo.env->NewStringUTF(pFontName);

jint  size=nSize;

jintArray array=(jintArray)minfo.env->CallStaticObjectMethod(minfo.classID,minfo.methodID,jmsg1,jmsg2,size);

jsize len=minfo.env->GetArrayLength(array);

jint* body = minfo.env->GetIntArrayElements(array, 0);

if (body==NULL) {

CCLOG("body %s %d: error to get methodInfo", __FILE__, __LINE__);

return CCSizeMake(nSize, nSize);

}

int width=body[0];

int height=body[1];

  //以下的清理工作必不可少 否则会报 ReferenceTable overflow (max=512)

minfo.env->ReleaseIntArrayElements(array, body, 0);

minfo.env->DeleteLocalRef(jmsg1);

minfo.env->DeleteLocalRef(jmsg2);

minfo.env->DeleteLocalRef(array);

return CCSizeMake(width, height);

}

2、在Cocos2dxBitmap类中添加下面的内容:

static String tempFontName="";

static int tempFontSize=0;

private static Paint tmpPaint;

public static int[] getFontSize(String text, final String pFontName, final int pFontSize){

if(tmpPaint==null||tempFontSize!=pFontSize||!tempFontName.equals(pFontName)){

Log.i("cocos2d-x-android", "pFontName =="+pFontName+" pFontSize =="+pFontSize);

tmpPaint= Cocos2dxBitmap.newPaint(pFontName, pFontSize, HORIZONTALALIGN_LEFT);

tempFontName=pFontName;

tempFontSize=pFontSize;

}

int width=(int)tmpPaint.measureText(text);

final FontMetricsInt fm = tmpPaint.getFontMetricsInt();

int height = (int) Math.ceil(fm.bottom - fm.top)+2;

return new int[]{width,height};

}

ios:

CCSize CCImage::getStringSize(const char *text, const char * pFontName, int nSize)

{

NSString * str = [NSString stringWithUTF8String:text];

NSString * fntName      = [NSString stringWithUTF8String:pFontName];

CGSize dim, constrainSize;

id font = [UIFont fontWithName:fntName size:nSize];

if (font)

{

dim = _calculateStringSize(str, font, &constrainSize);

}

else

{

if (!font)

{

font = [UIFont systemFontOfSize:nSize];

}

if (font)

{

dim = _calculateStringSize(str, font, &constrainSize);

}

}

return CCSizeMake(dim.width, dim.height);

}

cocos2dx获得字体的宽高

时间: 2024-10-24 21:34:06

cocos2dx获得字体的宽高的相关文章

quick cocos2d-x 精灵大小(宽高)获取

quick下sprite的大小获取,记录一下: local w = sprite:getContentSize().width local h = sprite:getContentSize().height 今天连这个最基本的,都不知道怎么获取.挺实用的代码额~ quick cocos2d-x 精灵大小(宽高)获取,布布扣,bubuko.com

007. 自定义ListBox的item的宽高, 字体居中

/// <summary> /// 自定义ListBox的item的宽高, 字体居中 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void lisB_DrawItem(object sender, DrawItemEventArgs e) { if (e.Index =

PHP-根据字符串和所用字体计算字符串所占宽高

今天由于用GD画图, 需要把一段文字在一个框内居中, 但是文字的宽度如果用strlen($str) * $font_size来计算的话, 由于文字不是等宽高的, 所以会导致偏离, 最后选用的GD库的imagettfbbox()函数, 其原型如下 array ImageTTFBBox(int size, int angle, string fontfile, string text); 其中返回一个数组, 有八个元素, 描述了四个角的坐标 0     左下角 X 位置 1     左下角 Y 位置

iOS_根据文字字数动态确定Label宽高

iOS7中用以下方法 - (CGSize)sizeWithAttributes:(NSDictionary *)attrs; 替代过时的iOS6中的- (CGSize)sizeWithFont:(UIFont *)font 方法 // iOS7_API_根据文字 字数动态确定Label宽高 // 设置Label的字体 HelveticaNeue Courier UIFont *fnt = [UIFont fontWithName:@"HelveticaNeue" size:24.0f]

frame方式布局一段文子,设置宽高

计算一段文字的宽高 /** * 计算一段文字的宽高 * * @param size 这段文字的最大宽高 * @param options NSStringDrawingUsesLineFragmentOrigin * @param attributes 文字的字体属性 * @param context nil * * @return 返回的是 CGRect 类型,frame */ - (CGRect)boundingRectWithSize:(CGSize)size options:(NSStr

label 自适应宽 高

//初始化label    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0,0,0,0)];    //设置自动行数与字符换行    [label setNumberOfLines:0];    // 测试字串    NSString *str = @"\n  一别之后 两地相悬 只说三四月 谁知五六年 七玄琴无心谈 八行书无可传 九连环从中断 十里长亭望眼欲穿 百思想 千系念 万般无奈把郎怨  \n  万言千语说不完 百

深入了解页面的宽高

大杀器rem 我们可以知道,页面主体中规中矩,分为两部分:上半部分是介绍页面,下半部分是主体界面,有一个点击按钮来负责全部用户交互,为了适配iphone4到6plus以及众多安卓,我们对整个页面的架构可以有如下几种方案: 高度百分比 高度百分比方案--整个屏幕的主要高度高度都用百分比定位,比如介绍部分占高度的百分之30,点击抢红包部分占剩下的百分之70. 优点--易于理解好上手缺点--由于行内样式,行间样式和它们的父子元素具有复杂的宽高关系,因此内部,比如介绍部分的内部的诸多元素想必还要用到px

根据字符长度动态确定UIlabel宽高

iOS7中用以下方法 - (CGSize)sizeWithAttributes:(NSDictionary *)attrs; 替代过时的iOS6中的- (CGSize)sizeWithFont:(UIFont *)font 方法 1 // iOS7_API_根据文字 字数动态确定Label宽高 2 3 4 // 设置Label的字体 HelveticaNeue Courier 5 UIFont *fnt = [UIFont fontWithName:@"HelveticaNeue" s

iOS 根据文字字数动态确定Label宽高

iOS7中用以下方法 - (CGSize)sizeWithAttributes:(NSDictionary *)attrs; 替代过时的iOS6中的- (CGSize)sizeWithFont:(UIFont *)font 方法 // iOS7_API_根据文字 字数动态确定Label宽高 // 设置Label的字体 HelveticaNeue Courier UIFont *fnt = [UIFont fontWithName:@"HelveticaNeue" size:24.0f]