我做了一个使用图形的游戏。我使用while循环来创建屏幕输出,因此下面示例中的x1值一直减少5。这意味着我一直在创建游戏的所有屏幕,除了while循环继续,玩家只显示他所在屏幕的一部分。这显然是非常低效的,所以我想知道是否有人有更有效的方法来做这件事。我还有一个更具体的问题。。。outtextxy不允许负x值,这意味着
outtextxy(-10,400,"text that is long enough that should be shown on screen even though it starts before screen beginning");
不会出现在屏幕上,所以我的代码是:
outtextxy(x1+301,400,"Use 'd' to duck");
它会在游戏中的屏幕被传递之前停止打印到屏幕,当x值变为负值时,而不是像我希望的那样,当结束字母的x值被传递时。
最佳答案
你需要clip输出。像这样包装outtextxy
(您可能需要调整参数和返回值以匹配outtextxy
)。我假设你用的是固定宽度的字体。
在x坐标系中剪切文本类似于:
int clippedouttext(int x, int y, char *text) {
const int CHAR_WIDTH = 8; /* Replace 8 by actual character width */
if (text == NULL || *text = '\0') { return 0; } /* No text was submitted */
while (x < 0) {
x += CHAR_WIDTH;
++text;
if (*text == `\0`) { return 0; } /* The text is outside the viewport. */
}
return outtextxy(x, y, text);
}