2010-12-01 51 views
0

我想复制Spinrite在屏幕右上角显示的旋钮效果,以表明它仍在运行并且未冻结。你可以在这里看到一个例子2:18 - http://youtu.be/XRmDwVj5CRM在C中复制Spinrite动画效果

我们可以讨论Spinrite的功效,直到奶牛回家,但不能否认它有一个体面的用户界面考虑它的运行。

我将在ARM平台上复制C中的效果,但我正在寻找一般建议而不是代码,比如如何增加动画的步骤。

在此先感谢。

回答

1

这是一些老技术在那里,但它看起来像吉布森已经更新了他的一个小UI 。我记得他的微调是人物......但我离题了。 :)

这是在文本模式,最有可能通过在DOS中挂钩定时器中断并绘制定时器的每隔一个滴答作出。

一个标准的DOS计时器大概每55毫秒打一个勾号。

通过使用高级扩展DOS字符集写入指针0xA0000,您可以直接在DOS上在X86上绘制屏幕。

(请注意,这是来自老内存,已经超过15年了,因为我已经做了这些东西:) 换句话说,要在屏幕的第一行/列处绘制字母'A' ,你会做以下。

 
    char *screen = 0xA0000; 
    *screen = 'A'; 

为了得到一点点更先进的,(没有错误或边界检查。)

 
#define COLUMNS 80 
#define ROWS 25 
#define VIDMEM_BASE 0xA0000 

// Row and column are 1 based 
// Note that in a real implementation you would make sure row/column are within the screen bounds 
// and if you were on the last row, you might scroll the screen up etc. 
void writeScreen(char theChar, size_t row, size_t column) 
{ 
    char *screenBase = VIDMEM_BASE; 

    screenBase += ((row - 1) * COLUMNS) + column - 1; 
    *screenBase = theChar; 
} 

根据以上考虑,你必须弄清楚这些东西是如何工作在你的胳膊系统并复制它。看看ARM的ncurses或Borland conio系统的端口可能会给你一个良好的开端。我知道Borland的Turbo Vision库有一个移植到Linux的端口,但我不确定它是否被移植到ARM。如果你有兴趣的话,这里有一个link到sourceforge页面。 Turbo Vision在当时是一个不错的文本模式GUI,因为它是值得的。

希望这会有所帮助。

0

我还没有在ARM平台上工作过多年。曾经有一个阿基米德。

我似乎不能够对这个问题发表评论,所以我会要求澄清在这里:

你在使用的图形动画?我的意思是动画GIF,一组位图文件或每次从头开始绘制,还有其他的东西?

我相信在ARM上你可以设置一个定时器中断回调thingamajig。然而,即使应用程序本身被冻结,也可能会被调用,导致用户认为它正在工作。

我不知道什么UI库或任何你使用的,但我曾经工作过的大部分都有一个方法来在事件队列上进行轮询()。每次轮询()返回时,计算自上次重新绘制动画以来的经过时间,如果足够大,则执行下一帧。如果不是,则减少poll()超时,以免在poll()中阻塞时间过长。

另外,有时候您可以让操作系统将定时事件推送到事件队列中。每次从事件队列中读取一帧时重新绘制一帧。这可能特别有用,因为如果事件处理缓慢并开始收到积压,则会由动画放缓指示。即微调器会正常旋转全速,当应用程序发生颠簸和挣扎时缓慢旋转,并在应用程序挂起时停止。

这是您要查找的信息吗?

至于增加动画的步骤,我相信你说的不是一样的东西:

int step = 0; 

... 

step = (step + 1) % max_steps;