gpt4 book ai didi

c - allegro - 如何绘制显示的有限部分

转载 作者:行者123 更新时间:2023-11-30 17:11:04 26 4
gpt4 key购买 nike

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

即玩家必须有范围。我的背景不是位图,我基本上将后缓冲区设为黑色,在其上绘制图元并翻转它。

我该怎么做?

最佳答案

听起来像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) 抽奖;这将是屏幕外。

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

另请注意,我们添加了一半的屏幕尺寸,以便播放器居中。

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

关于c - allegro - 如何绘制显示的有限部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32552378/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com