1

我制作了一个使用 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 值通过时,就像我想要的那样。

4

1 回答 1

1

您需要剪辑输出。像这样包装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);
}
于 2013-03-25T12:02:29.483 回答