介紹
Day13介紹了享元模式,其概念為透過共享物件來減少資源使用。以下是Game Programming Pattern一書提供的另一個範例。
在設計遊戲地圖時,會在每個地圖區塊存入相關的地理資訊,例如草地、山丘、海洋等。通常這些資訊不會只出現一次,若地圖很大,這些地理資訊可能會重複儲存而占用資源,此時使用Flyweight pattern將共同的資訊提出。
enum Terrain
{
TERRAIN_GRASS,
TERRAIN_HILL,
TERRAIN_RIVER
};
class World
{
private:
Terrain tiles_[WIDTH][HEIGHT];
};
int World::getMovementCost(int x, int y)
{
switch (tiles_[x][y])
{
case TERRAIN_GRASS: return 1;
case TERRAIN_HILL: return 3;
case TERRAIN_RIVER: return 2;
}
}
bool World::isWater(int x, int y)
{
switch (tiles_[x][y])
{
case TERRAIN_GRASS: return false;
case TERRAIN_HILL: return false;
case TERRAIN_RIVER: return true;
}
}
Ref:
https://gameprogrammingpatterns.com/flyweight.html