Printf 擦除屏幕(使用 MoSync 库)

Posted

技术标签:

【中文标题】Printf 擦除屏幕(使用 MoSync 库)【英文标题】:Printf erases the screen (using the MoSync library) 【发布时间】:2013-10-29 19:12:57 【问题描述】:

我有一些看起来像这样的简单代码:

printf("Press zero or back to exit\n");
maSetColor(0x0055ff);
maFillRect(10,10,100,100);
maUpdateScreen();

这会运行,但是当它是这样的时候:

maSetColor(0x0055ff);
maFillRect(10,10,100,100);
maUpdateScreen();
printf("Press zero or back to exit\n");

printf 擦除屏幕。

这是为什么?这是printf() 的正常属性吗?我应该使用不同的打印功能在所有内容上打印,而不是擦除所有内容吗?我知道我可以改用 MoSync 的 MaDrawText(),但我想知道是否有一个也可以使用的打印功能。

【问题讨论】:

你怎么知道是printf抹掉了屏幕?我对mosync不熟悉,但它看起来类似于curses或ncurses;如果是这样,将它与像printf 一样直接写入stdout 可能是个坏主意。为什么不想使用MaDrawText() 这就是我正在使用的。我只是不知道为什么printf 会擦除屏幕。我不确定这对于各种 C++ 库是否正常。 printf 擦除屏幕是不正常的,但我想 mosync 可能会将屏幕置于某种模式,其中正常字符的解释不同。我会尝试在printf 之前添加类似sleep(5) 的调用,以确保是printf 正在这样做。了解您正在运行的环境(操作系统、终端仿真器等)也会有所帮助。 【参考方案1】:

这是预期行为,printf() 将在单独的屏幕中显示文本。另一种方法是maDrawText(int left, int top, const char* str);,它允许您在绘画区域中绘制文本。

您的代码可能如下所示:

//Draw the Rectangle
maSetColor(0x0055ff);
maFillRect(10,10,100,100);

//Draw the text
maSetColor(0xffffff);
maDrawText(10,10,"Press zero or back to exit");

//Update the screen to reflect changes
maUpdateScreen(); 

您的第一个示例有效,因为您在更新屏幕之前调用了该函数,因此 printf() 不会在您当前的绘图之上绘制。

【讨论】:

以上是关于Printf 擦除屏幕(使用 MoSync 库)的主要内容,如果未能解决你的问题,请参考以下文章

MoSync 原生 UI 和部署

由于 std::pair 导致的 GCC (MoSync) 中的 C++ 构建错误

如何使用 Mosync 创建初始启动画面

MoSync:Java 已启动但返回退出代码 13

使用 JavaScript 使用 MoSync 原生 UI 捕获用户输入

通过 MoSync 进行 android c++ 软件开发是不是值得?