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);
minfo.env->DeleteLocalRef(minfo.classID);
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获得字体的宽高的更多相关文章
- js实现字体和容器宽高随窗口改变
用于字体大小和容器的宽高字体和宽高设为rem就可以了 var html = document.documentElement; function fonts(){ var hW = html.offs ...
- 007. 自定义ListBox的item的宽高, 字体居中
/// <summary> /// 自定义ListBox的item的宽高, 字体居中 /// </summary> /// <param name="sende ...
- PHP-根据字符串和所用字体计算字符串所占宽高
今天由于用GD画图, 需要把一段文字在一个框内居中, 但是文字的宽度如果用strlen($str) * $font_size来计算的话, 由于文字不是等宽高的, 所以会导致偏离, 最后选用的GD库的i ...
- 根据字符长度动态确定UIlabel宽高
iOS7中用以下方法 - (CGSize)sizeWithAttributes:(NSDictionary *)attrs; 替代过时的iOS6中的- (CGSize)sizeWithFont:(UI ...
- input与select 设置相同宽高,在浏览器上却显示不一致,不整齐
遇到 input与select 设置相同宽高,在浏览器上却显示不一致,遂实验了下(IE 10.013 ,Firefox 30.0),得出以下结论 input width,height 值里面, 不 ...
- iOS_根据文字字数动态确定Label宽高
iOS7中用以下方法 CGSize 替代过时的iOS6中的- (CGSize)sizeWithFont:(UIFont *)font 方法 // iOS7_API_根据文字 字数动态确定Label宽高 ...
- 【Android 应用开发】 自定义组件 宽高适配方法, 手势监听器操作组件, 回调接口维护策略, 绘制方法分析 -- 基于 WheelView 组件分析自定义组件
博客地址 : http://blog.csdn.net/shulianghan/article/details/41520569 代码下载 : -- GitHub : https://github.c ...
- CSS宽高背景介绍
本萌新还未毕业,在一家外包公司干了一个月,因烦恼日常琐事任务,深感外包之坑,以及上班路途艰辛,特转战erp实施,继写日常随笔,望来日屌丝逆袭,走上人生巅峰. 若有错误,请前辈指点迷津,在下谢过. &l ...
- iOS根据文字字数动态确定Label宽高
我们有时候在写项目的时候,会碰到,意见反馈,还有其他地方,讲座活动细则等需要大篇展示的文本, 因为每次服务器返回的内容大小不一,所以需要动态的调整label的宽高: 在ios 6 的时候可以: -(v ...
随机推荐
- 2018-06-17 js数组
数组的定义:① var arr=new Array(xx,xx,xx); ②var arr=[yy,yy,,yy]; 数组的查看:arr[x]; 数组的修改:arr[x]=xx; 数组的遍历:①for ...
- ql的python学习之路-day7
函数与函数式编程 一.编程模式分为三种: 1.面向对象编程:类----->关键字class 2.面向过程编程:过程----->关键字def,没有return 3.函数式编程:函数----- ...
- PAT 1011 World Cup Betting (20分) 比较大小难度级别
题目 With the 2010 FIFA World Cup running, football fans the world over were becoming increasingly exc ...
- Paxos made simple 翻译尝试
[这篇论文我翻译下来,首先感觉还是不好懂,很多地方结论的得出不够清楚,需要读者自己思考其中的原因.要理解Paxos算法,个人建议先搜索下介绍算法的中文文章,大致了解下Paxos算法要做什么,然后就再读 ...
- 7.1 Go interface
7.1 Go interface 雨痕-Go语言笔记 接口采用了duck type方式,在程序设计中是动态类型的一种风格 `当看到一只鸟走起来像鸭子.游泳起来像鸭子.叫起来也像鸭子,那么这只鸟就可以被 ...
- Django中的事务与ajax
一 事务与锁 1.行级锁 行级锁是由存储引擎实现的.如mysql里默认指定的InnoDB存储引擎,由它实现行级锁.InnoDB的行级锁定同样分为两种类型,共享锁(X)和排他锁(S). 对于UPDATE ...
- Spring全家桶——SpringBoot渐入佳境
Spring全家桶系列--SpringBoot渐入佳境 萌新:小哥,我在实体类写了那么多get/set方法,看着很迷茫 小哥:那不是可以自动生成吗? 萌新:虽然可以自动生成,但是如果我要修改某个变量的 ...
- js数组对象的一些常用方法
pop:删除数组最后一个元素 语法: array.pop(); 如 var array = ['1','2','3']; array.pop(); 返回结果:[‘1’,‘2’]此方法会改变数组的长度 ...
- akka-typed(0) - typed-actor, typed messages
akka 2.6.x正式发布以来已经有好一段时间了.核心变化是typed-actor的正式启用,当然persistence,cluster等模块也有较大变化.一开始从名称估摸就是把传统any类型的消息 ...
- php日志监控
<?php date_default_timezone_set('Asia/Shanghai'); $time = date('Y-m-d H:i:s',time()); //访问时间 $ip ...