查看完整版本: 在field中显示有问题,麻烦大家指出问题所在,谢谢

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

呵……谢谢大家
问题已解决。

风云闲人 2008-5-31 19:47

那就顶吧
页: [1]
查看完整版本: 在field中显示有问题,麻烦大家指出问题所在,谢谢