我在做一個2D基於圖塊的遊戲,我試圖讓我的磚結構的微小使用位字段和字節在瓦結構中的值:如何定義2D瓦片遊戲的瓦片結構?
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)
};
所以,如果我有一個2D 1024x1024瓦片陣列,然後它只有3mb的內存,當我從HD保存/加載。
但現在我需要動畫瓷磚,所以我需要像額外的數據,
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;
};
在每個瓦片,並且由於2D陣列是定義像:
平鋪瓦片[X] [ Y];
即使只有很小比例的圖塊被動畫化,每個圖塊的大小仍將爲10個字節左右。我想存儲一個二維指針數組,然後每個指向一個普通的瓷磚或動畫的,但這將意味着每個指針是4個字節,並指向至少4-10個字節。
你是否爲8MB內存的遊戲男孩編程?你確定這是一個瓶頸嗎? – orlp
那麼gameboy怎麼做呢,我記得口袋妖怪有一些靜態和其他動畫的海量地圖 – Kaije
@Kaije:他們曾經一次只加載一個子集,足以填滿幾個屏幕。此外,只有幾種瓷磚(可能每個瓷磚一個字節),並且地圖也不是那麼大。 IIRC,來自塞爾達鏈接的覺醒的地圖是512x512,整個ROM裝入幾百千字節。 –