graphics.h中outtextxy的负x值

时间:2013-03-25 10:36:19

标签: c graphics dos turbo-c

我制作了一款利用graphics.h的游戏。我使用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值传递时,它会停止打印到屏幕,就像我想要的那样。

1 个答案:

答案 0 :(得分:1)

您需要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);
}