易码技术论坛

 找回密码
 加入易码
搜索
查看: 262721|回复: 11

800的LAVA有问题??

[复制链接]
发表于 2006-7-11 17:48:00 | 显示全部楼层
貌似我写的代码,800的1.2内核对某些缓冲区绘图会有问题,你升级为1.4试试看。
发表于 2006-7-11 17:57:00 | 显示全部楼层
把main改成这样

void main()
{
    do{

        ClearScreen();
        DrawFace(80, 32);
        DrawFinger(80, 32);
        DrawDate(30, 66);
    }while(!CheckKey(27));
}

试试~

另外估计楼主的代码运行效果不会太好(闪屏应该比较严重,不过我没在wqx上试过,猜测而已),建议改成这样:

void main()
{

    char ms;
    do{

        if(((Getms()-ms)&0xff)>=128){

          ClearScreen();
          DrawFace(80, 32);
          DrawFinger(80, 32);
          DrawDate(30, 66);

          ms =Getms();

       }
    }while(!CheckKey(27));
}

发表于 2006-7-11 18:00:00 | 显示全部楼层
还有,把DrawFace(80, 32);
        DrawFinger(80, 32);
中的Refresh()去掉.
发表于 2006-7-11 18:08:00 | 显示全部楼层
代码系我写的,Face和Finger里面加Refresh()是原本把三个函数分开了的。其实可以把三个函数里面Refresh都去掉,在main里面加Refresh。

没有考虑控帧是因为当时只是为了提供思路,直接在PC上面测试的。没有考虑真机的效果。
发表于 2006-7-11 18:11:00 | 显示全部楼层
哦,个人认为实现这种功能用一个函数足矣,那样代码会紧凑很多;函数写多了还要考虑各个函数间的关系,反而麻烦.
 楼主| 发表于 2006-7-11 21:05:00 | 显示全部楼层
不行,我吧YZK的代码贴出来就是因为有很严重的问题

在800中,时针和分针的线竟然超越了屏幕

刷新也有问题,说不清楚,似乎真是800自身的毛病,自己搞台800侃侃就知道了
发表于 2006-7-11 21:14:00 | 显示全部楼层
TC800内核1.2版以前就发现此类问题了,1.4版貌似修正了很多,你升级试试看
 楼主| 发表于 2006-7-12 07:54:00 | 显示全部楼层
汗,我的就是1.4,在808上运行只有刷新错误(看不清楚)

而在800上似乎竟然有几条线画出了表盘
发表于 2006-7-12 09:29:00 | 显示全部楼层
呵呵,那偶就不清楚了,我的TC800早卖掉了~

至于代码是应该没问题的了(注意,LAVA1.0中Circle不支持缓冲区绘图,如果要想在其它文曲星上运行,那里需要改改)...
 楼主| 发表于 2006-7-12 09:36:00 | 显示全部楼层
汗~~~~实机和模拟器区别浩大
发表于 2006-7-17 09:22:00 | 显示全部楼层
我用的是1。6版内核,仍有问题,当|角度|大于90度时就会出错,所以我写了一个程序,把所有的角度都用0~90度来表示,回为90~180与0~90度成X轴对称,180~270与0~90成原点对称,270~360与0~90成Y轴对称!根据这一原理可以间接地生成一个石英钟!
 楼主| 发表于 2006-7-11 14:28:28 | 显示全部楼层 |阅读模式
以下内容为程序代码:
struct TIME
{
    int year;
    char month;
    char day;
    char hour;
    char minute;
    char second;
    char week;
};

int size = 30;
struct TIME theTime;
char dateBuf[20];
char week[][3]={"日","一","二","三","四","五","六"};

// 画表盘
void DrawFace(int x, int y)
{
    int i;
    Circle(x, y, size, 0, 0x41);
    for(i=0; i<12; i++)
    {
        Line(x+Cos(30*i)*(size*7/8)/1024,
             y+Sin(30*i)*(size*7/8)/1024,
             x+Cos(30*i)*(size)/1024,
             y+Sin(30*i)*(size)/1024,
             0x41);
    }
    Refresh();
}

// 画指针
void DrawFinger(int x, int y)
{
    GetTime(theTime);
    Circle(x, y, size*3/4, 1, 0x40);
    // 秒针
    Line(x,
         y,
         x+Sin(6*theTime.second)*(size*3/4)/1024,
         y-Cos(6*theTime.second)*(size*3/4)/1024,
         0x41);
    // 分针
    Line(x,
         y,
         x+Sin(6*theTime.minute)*(size*2/3)/1024,  
         y-Cos(6*theTime.minute)*(size*2/3)/1024,
         0x41);
    // 时针
    Line(x,
         y,
         x+Sin(30*theTime.hour+theTime.minute/2)*(size*2/5)/1024,  
         y-Cos(30*theTime.hour+theTime.minute/2)*(size*2/5)/1024,
         0x41);
    Refresh();
}

// 显示日期
void DrawDate(int x, int y)
{
    Block(x, y, x+strlen(dateBuf)*6, y+12, 0);
    sprintf(dateBuf, "%d年%d月%d日 星期%s",
            theTime.year,
            theTime.month,
            theTime.day,
            week[theTime.week]);
    TextOut(x, y, dateBuf, 1);
    Refresh();
}

void main()
{
    do{
        DrawFace(80, 32);
        DrawFinger(80, 32);
        DrawDate(30, 66);
    }while(!CheckKey(27));
},就是这段代码,模拟器上运行正常,而在800上则不正常,什么原因,高手可否回答一下???
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2025-8-24 06:31 , Processed in 0.011618 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表