紧急求助

tyou1984 2008-07-01 08:57:55

最近在做一项JAVA游戏移植BREW的项目。其中游戏的对话文字要求逐个显示,在JAVA中,程序使用的是substring一个一个读取原字符串中的字符,再用m_hFont[ nFont ].stringWidth判断下一个字符显示的位置,达到逐个显示的效果,移植到BREW中,我自己编写了一个substring和stringWidth函数,在模拟器上调试,文字能够正常显示,但是在输出窗口中可以发现文字的逐个显示需要反复对内存进行大量操作。在手机上进行调试,却发现文字的位置不能正常判断,在不同的手机上文字部分位置显示不正确。请大家帮我看看。谢谢了

stringWidth(AECHAR* str) {
int ret = 0;
AECHAR* temp = str;
ret = IDISPLAY_MeasureText( disp, AEE_FONT_NORMAL, str );
RELEASE( temp );
return ret;
}

substring( UINT left, UINT right ){
if ( left > right )
{
int temp = right;
right = left;
left = temp;
}

if ( right > Length )
{
right = Length;
}

length = right - left;
offset = left;

AECHAR *Buffer = (AECHAR*) MALLOC((BufferLen+1)*sizeof(AECHAR));
signed char* ch = (signed char*)MALLOC((length+1)*sizeof(signed char));
int i ;
for (i = 0;i<length;i++)
{
ch = data[offset+i];
}
ch[length] = '\0';
STREXPAND((unsigned char*)ch,length,Buffer,(length+1)*sizeof(AECHAR));
Length = WSTRLEN(Buffer);
FREE(ch);
}
}
...全文
920 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
dannyer99 2008-07-10
  • 打赏
  • 举报
回复
我认为没有必要一个字符一个字符的显示到屏幕上;直接修改待显示的字符串,一个一个的添加字符即可;比如,如果你需要显示"abcd",你可以用BREW的方法依次显示"a" "ab" "abc" "abcd",就能够达到你说的效果;
skelusi 2008-07-08
  • 打赏
  • 举报
回复
stringWidth(AECHAR* str) {
int ret = 0;
AECHAR* temp = str;
ret = IDISPLAY_MeasureText( disp, AEE_FONT_NORMAL, str );
RELEASE( temp );
return ret;
}

该函数存在一定的风险,函数执行完后ret存在被改写的风险,你检查过带回正确的值了吗?
unibrew 2008-07-06
  • 打赏
  • 举报
回复
问题问的不是很清晰。

stringWidth(AECHAR* str) {
int ret = 0;
AECHAR* temp = str;
ret = IDISPLAY_MeasureText( disp, AEE_FONT_NORMAL, str );
RELEASE( temp );
return ret;
}

RELEASE(temp) 为什么放函数内,好别扭。

应该
AECHAR *pwsz = new AECHAR[10];
stringWidth(pwsz );
delete[] pwsz;




程序使用的是substring一个一个读取原字符串中的字符

只需要移动指针就可以实现了,如果要分行显示(参照qualcomm 构建可移植brew应用程序的方法之换行显示,也就是IDISPLAY_MeasureText),参照不知道你substring写的函数要什么什么功能,参数就2个位置标识,没有字符串指针,没有返回值。






IDISPLAY_MeasureText就是用来测量长度的,AEE_FONT_NORMAL每个brew机器都支持的字体。
weed927199 2008-07-04
  • 打赏
  • 举报
回复
1,各手机的屏幕,字体都不同,应获得屏幕大小,字体高度宽度,进行处理。
2,你的变量Buffer没有释放。
smilelance 2008-07-02
  • 打赏
  • 举报
回复
IDISPLAY_MeasureText( disp, AEE_FONT_NORMAL, str ); 你真机上是这个字体么? 距离应该按屏幕尺寸来算,这样到不同机器上才会一样,因为不同机器上文字size是不同的
sunwhite 2008-07-02
  • 打赏
  • 举报
回复
在真机上对于文字的大小和距离算的不对,尤其是当真机和模拟器的默认字体不匹配的时候更是这样。

1,101

社区成员

发帖
与我相关
我的任务
社区描述
本论坛以AI、WoS 、XR、IoT、Auto、生成式AI等核心板块组成,为开发者提供便捷及高效的学习和交流平台。 高通开发者专区主页:https://qualcomm.csdn.net/
人工智能物联网机器学习 技术论坛(原bbs) 北京·东城区
社区管理员
  • csdnsqst0050
  • chipseeker
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧