我想复制Spinrite在屏幕右上角显示的微调器效果,表明它仍在运行且尚未冻结。您可以在2:18 - http://youtu.be/XRmDwVj5CRM
看到此示例我们可以讨论Spinrite的功效,直到奶牛回家,但不可否认的是,考虑到它的运行情况,它有一个不错的用户界面。
我将在ARM平台上复制C中的效果,但我正在寻找一般建议而不是代码,例如如何增加动画的步骤。
提前致谢。
答案 0 :(得分:1)
那里有一些老技术,但看起来像Gibson已经更新了他的UI。我记得他的旋转器是/ \ | - 字符......但我离题了。 :)
这是在文本模式下,很可能通过在DOS中挂钩定时器中断并绘制定时器的每个其他节拍来完成。
标准的DOS计时器大约每隔55毫秒勾选一次。
您可以使用高飞扩展DOS字符集写入指针0xA0000,直接在X86上的DOS中绘制屏幕。
(请注意,这是来自OLD内存,自从我做了这些东西以来已有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系统上运行并复制它。看一下针对ARM的ncurses或Borlands conio系统的端口可能会给你一个良好的开端。我知道Borland的Turbo Vision库有一个到Linux的端口,但我不确定它是否已经移植到ARM。如果您有兴趣,这里是sourceforge页面的link。 Turbo Vision在当时是一个很好的文本模式GUI,值得它。
希望这有帮助。
答案 1 :(得分:0)
我已经很久没有在ARM平台上工作了。曾经有阿基米德。
我似乎无法对这个问题发表评论,所以我会在这里要求澄清:
你在为动画的图形使用什么?我的意思是动画GIF,一组位图文件,或者每次从头开始绘图,还有什么?
我相信在ARM上你可以设置一个定时器中断回调thingamajig。然而,即使应用程序本身已经冻结,也可能会被调用,错误地导致用户相信它正在工作。
我不知道您正在使用什么UI库或其他任何东西,但我曾经做过的大部分工作都有一种方法可以在事件队列上进行poll()。每次poll()返回时,计算自上次重新绘制动画以来经过的时间,如果它足够大,则执行下一帧。如果没有,则减少poll()超时,这样就不会在poll()中阻塞太长时间。
或者,有时您可以让操作系统将定时事件推送到事件队列中。每次从事件队列中读取一帧时重绘一帧。这可能特别有用,因为如果事件处理事件的速度很慢并且开始得到积压,则动画速度会减慢。即当应用程序挣扎并挣扎时,微调器将正常旋转全速,缓慢旋转,并在应用程序挂起时停止。
这是您正在寻找的那种信息吗?
至于增加动画的步数,我相信你不会谈论类似的事情:
int step = 0;
...
step = (step + 1) % max_steps;