sách gpt4 ai đã đi

c++ - 如何为基于 2D tile 的游戏定义 tile 结构?

In lại 作者:行者123 更新时间:2023-11-28 03:48:13 33 4
mua khóa gpt4 Nike

我正在制作一个基于 2d tile 的游戏,我试图通过对 tile 结构中的值使用位字段和字节来保持我的 tile 结构小:

struct Tile
{
// 3 bytes (24 bits)
BYTE i : 8; // Texture index (0-255)
BYTE p : 1; // Passable (0-1)
BYTE x : 7; // Texture x (0-127)
BYTE y : 7; // Texture y (0-127)
BYTE v : 1; // Visible (0-1)
};

所以如果我有一个 1024x1024 block 的二维数组,那么它在内存中只有大约 3mb,当我从高清保存/加载时。

但现在我需要动画图 block ,所以我需要额外的数据,例如,

struct Tile
{
#define TILE_NORMAL 0
#define TILE_ANIMATED 1
BYTE tile_type;

// 3 bytes (24 bits)
BYTE i : 8; // Texture index (0-255)
BYTE p : 1; // Passable (0-1)
BYTE x : 7; // Texture x (0-127)
BYTE y : 7; // Texture y (0-127)
BYTE v : 1; // Visible (0-1)

// For animated tiles
BYTE frame;
BYTE maxFrame;
float frameTime;
};

在每个图 block 上,由于二维数组定义如下:

瓷砖瓷砖[x][y];

每个图 block 大约有 10 个字节,即使只有很小一部分图 block 是动画的。

我想存储一个二维指针数组,然后每个指针指向一个普通图 block 或一个动画图 block ,但这意味着每个指针都是 4 个字节,并且指向至少 4-10 个字节。

1 Câu trả lời

如果您想节省内存,请不要将动画数据存储在图 block 本身中。相反,您可以在游戏程序中定义一个单独的结构,例如:

struct AnimationSequence
{
BYTE first;
BYTE current;
BYTE frames[];
float frametime;
}

然后您可以定义一个包含其中几个的数组,它们代表每种类型的动画图 block 及其动画方式。然后,在您的动画计时器中,循环遍历此数组,对照屏幕上的图 block 检查它,并根据需要重新绘制它们。

为了节省更多内存,您可能要考虑的另一件事是KHÔNG在图 block 数据中存储 X/Y 坐标值。我假设您的 X/Y 字节表示图 block 在屏幕上绘制的位置,或类似的东西。您可以尝试将坐标值附加到游戏的 View 窗口中它们自己的数组中,而不是附加到图 block 本身,这样当您绘制它们时,您将只有一个 View 窗口值的图 block 作为查找列表显示在屏幕上,而不是整个 map 的值(value)。

关于c++ - 如何为基于 2D tile 的游戏定义 tile 结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6700037/

33 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com