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 ... 
随机推荐
- 【漫画】读写锁ReadWriteLock还是不够快?再试试StampedLock!
			本文来源于公众号[胖滚猪学编程] 转载请注明出处! 在互斥锁ReentrantLock不好用?试试读写锁ReadWriteLock一文中,我们对比了互斥锁ReentrantLock和读写锁ReadWr ... 
- Wfuzz使用学习
			工具用了不总结,使用命令很容易生疏,今天就把笔记梳理总结一下. 0x01 简介 WFuzz是用于Python的Web应用程序安全性模糊工具和库.它基于一个简单的概念:它将给定有效负载的值替换对FUZZ ... 
- Sentinel源码解析三(滑动窗口流量统计)
			前言 Sentinel的核心功能之一是流量统计,例如我们常用的指标QPS,当前线程数等.上一篇文章中我们已经大致提到了提供数据统计功能的Slot(StatisticSlot),StatisticSlo ... 
- kafka如何防止key相同的消息并发消费
			最开始,我认为只用把消费者设置为单线程消费,就可以避免并发问题. 因为同一个key,分区一定相同,那么就只会被同一个消费者消费,消费者又是单线程,这样就避免了并发问题 后面发现,上述的方式没有办法处理 ... 
- webpack-dev-server简记
			webpack -v 3.4.1 npm -v 3.10.10 /////////////////////////////////////// webpack的webpack-dev-server可以 ... 
- Angular中的数据绑定
			(1)HTML绑定:{{}} (2)属性绑定:[] 注意:属性绑定通常赋值为变量,如果赋值为常量(如字符串常量) 必须用引号括起来,如<img [src]="'../../assets ... 
- Redis学习笔记(十二) 复制(上)
			偷个懒,晚上工作忙的太晚,整个复制功能的内容还没有写完,这里先说一下复制功能的简单应用. 在Redis中,用户可以通过执行SLAVEOF命令或者设置slaveof选项,让一个服务器去复制另一个服务器, ... 
- 基于腾讯云搭建squid代理服务器
			本文主要介绍下在腾讯云上搭建squid代理服务器,用于访问国外网站或者为爬虫提供代理ip,以及简单介绍下如何基于腾讯云提供的SDK,批量开启或者销毁代理服务器实例. Squid是一个高性能的代理缓存服 ... 
- .Net基础之3——运算符
			(3)Convert类型转换 1.类型如果相兼容的两个变量,可以使用自动类型转换或者显示类型转换. 但是如果两个类型的变量不兼容,这个时候可以使用一个叫做Convert的转换工厂进行转换. 注意:使用 ... 
- java后端解决跨域
			1 package com.zys.boot_jeep.config; import org.springframework.context.annotation.Bean; import org.s ... 
