jiangmapin 2006-6-30 22:52
在field中显示有问题,麻烦大家指出问题所在,谢谢
static void DrawTime()
{
FieldPtr field;
UInt32 playTime,milsec1;
UInt8 min, sec,milsec;
Char time[8];
Char *realTime,*text;
MemHandle textH,textH2,realTimeH;
realTimeH=MemHandleNew(9*sizeof(Char));
realTime=MemHandleLock(realTimeH);
realTime=time;
milsec1 = TimGetTicks();
playTime = TimGetTicks()/100;
min = playTime/60;
sec = playTime%60;
milsec = milsec1%100;
time[0] = min/10;
time[1] = min%10;
time[2] = ':';
time[3] = sec/10;
time[4] = sec%10;
time[5]= ':';
time[6]=milsec%10;
time[7]=milsec%10;
field=GetobjectPtr(MainFiled);
textH=MemHandleNew(StrLen(realTime)+1);
text=MemHandleLock(textH);
StrCopy(text,realTime);
MemHandleUnlock(textH);
textH2=FldGetTextHandle(field);
FldSetTextHandle(field,textH);
FldDrawField(field);
}
ecool 2006-7-1 18:30
有什么问题?不过realTime这个变量是多余的,仅仅用time字符数组就行了
FirstFan 2006-7-1 18:48
显然是time才开了8,要多一位,把time[8]=0;不然字符串没结束
然后貌似还有处笔误,是 time[6]=milsec%10;应该是/吧
再么,更换field内容应该单独用函数。
再看了下,发现问题还真不少,您还是写过算了-_-
realTime=MemHandleLock(realTimeH);
realTime=time;这儿是什么意思?
playTime = TimGetTicks()/100;
这个除一百也是不确定的,虽说一般认为OS5上可以,但还是建议使用SysTicksPerSecond()
同样的,有时如果不是每秒一百个ticks的话,你就不能把它当毫秒来用。
还有一个非常重要的事情,你显示的时间希望是当前北京时间,还是游戏运行时间?游戏运行时间的话应该保存上次时间,作差再用。若是北京时间的话,用TimGetTicks()得到的是距离系统启动后的时间,我想不通显示这时间是什么意思。
还有,更换field内容的函数也是整个错的,关键是你最好明白realTime里现在根本没存什么东西。还有,和这无关的一个事是,你申请内存要记得释放。并且,还应该注意下,新申请的内存不是全0的,是随机的数据。
不厚道说一句,这个基本上就没什么对的部分了
jiangmapin 2006-7-3 16:16
to FirstFan:
谢谢您指出我的问题所在,我是想做一个实现精确到0.01秒表的算法,然后将其结果显示在Field/Table中,因为初次接触,还望多多指教。
jiangmapin 2006-7-4 18:59
呵……谢谢大家
问题已解决。