C 快板-如何绘制显示的有限部分

C 快板-如何绘制显示的有限部分,c,allegro,C,Allegro,我正在编写一个像agar.io这样的游戏,我想创建一个像5000x5000这样的世界,但举例来说,玩家只能看到900x600部分 即玩家必须有一个范围。我的背景不是位图,我基本上是将backbuffer变成黑色,在上面绘制基本体并翻转它 我该怎么做呢?听起来我可以帮你 基本上,您有一个900x600的显示器(al_create_display(900600)),但是让您的对象在5000x5000空间中的任何位置都有位置 当玩家移动时,您会随之移动摄影机变换。绘制循环可能如下所示: al_cl

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

即玩家必须有一个范围。我的背景不是位图,我基本上是将backbuffer变成黑色,在上面绘制基本体并翻转它

我该怎么做呢?

听起来我可以帮你

基本上,您有一个900x600的显示器(
al_create_display(900600)
),但是让您的对象在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\u x,-player\u y
。如果玩家在 (1000,1000),在(1500,1500)处绘制的对象应在 (1500-10001500-1000),或(500500)相对于玩家。在(500, 500)将在(500-1000500-1000)或(-500,-500)处绘制;会的 屏幕外

不过,我们实际上不必对每个对象都执行此细分。您只需在其绝对位置绘制每个对象,变换会将其转换为相对于玩家的位置(玩家的“局部”空间)

还要注意的是,我们增加了一半的屏幕大小,使播放器居中

有很多方法可以做到这一点,但是上面的内容应该给你一个答案 好的开始。另外,使用变换可以轻松添加缩放之类的内容
和旋转。

使用谷歌,到某处试试。如果你发现一个更具体的问题(你会的),回来问这个。