【问题标题】:allegro - How to draw limited part of display [closed]allegro - 如何绘制显示的有限部分[关闭]
【发布时间】:2015-09-13 17:14:42
【问题描述】:

我正在编写像 agar.io 这样的游戏,我想创建一个像 5000x5000 这样的世界,但例如玩家只能看到 900x600 的部分。

即玩家必须有一个范围。我的背景不是位图,我基本上是让后备缓冲区变黑,在上面绘制图元并翻转它。

我该怎么做?

【问题讨论】:

  • 使用谷歌,在某个地方尝试。如果你发现了更具体的问题(你会的),回来问这个。

标签: c allegro


【解决方案1】:

听起来transforms 可以在这里为您提供帮助。

基本上,您有一个 900x600 的显示器 (al_create_display(900, 600)),但让您的对象在 5000x5000 空间中的任何位置都有位置。

当您的玩家移动时,您会随着他们移动相机变换。您的绘图循环可能如下所示:

  al_clear_to_color(al_map_rgb(0,0,0));

  ALLEGRO_TRANSFORM trans;
  al_identity_transform(&trans);
  al_translate_transform(&trans, -player_x, -player_y);
  al_use_transform(&trans);

  // draw the player
  al_draw_filled_circle(player_x + SCREEN_W / 2, player_y + SCREEN_H / 2,
                        32, al_map_rgb(255,0,0));

  // draw all other entities
  // ....

  al_flip_display();

请注意,相机移动了-player_x,-player_y。如果玩家在 (1000, 1000),应在 (1500, 1500) 处绘制对象 (1500-1000,1500-1000) 或 (500,500) 相对 玩家。 (500, 500) 将在 (500-1000,500-1000) 或 (-500,-500) 处抽取;这将是 屏幕外。

虽然我们实际上不必对每个对象都执行此减法。您只需在其 absolute 位置绘制每个对象,转换会将其转换为相对于玩家的位置 relative(玩家的“本地”空间)。

还请注意,我们添加了一半的屏幕大小,因此播放器居中。

有很多方法可以解决这个问题,但上面应该给你一个 好的开始。作为奖励,使用变换可以轻松添加缩放等内容 和旋转。

【讨论】:

    猜你喜欢
    • 2020-05-24
    • 2020-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多