Tilemap Sistemi: 2D Dünyalarda Verimli Harita Tasarımı
2D oyunlarda harita tasarımının en verimli yolu tilemap kullanmaktır. Tilemap, büyük bir dünyayı küçük kare parçalara (tile) bölerek tutmak demektir. Böylece binlerce bireysel nesne yerine tek bir grid yapısı yönetirsin.
Tilemap neden gerekli? Diyelim 1000x1000 piksel bir sahneyi piksel piksel tutmak istiyorsun. Her piksel için bir veri taşıyamazsın; bellek tükenir ve çizim yavaşlar. Ama 32x32 piksellik kareler (tile) kullanırsan sadece 31x31 = 961 tile'ı takip edersin. Her tile'a bir sayı atarsan (0 = boş, 1 = ot, 2 = ağaç), tüm harita bir dizi içinde kalır.
Adım 1: Tile Dizisini Tanımla
Haritanı bir 2D sayı dizisi olarak tut. Her sayı bir tile türünü temsil eder.
1map_data = [2[1, 1, 2, 1, 1],3[1, 0, 0, 0, 1],4[2, 0, 3, 0, 2],5[1, 0, 0, 0, 1],6[1, 1, 2, 1, 1]7]8# 0 = boş, 1 = çim, 2 = ağaç, 3 = evAdım 2: Tile Görsellerini Eşle
Her sayıya bir resim dosyası ata. Tile ID'si ile görsel arasında bir sözlük (dictionary) kur.
1tile_sprites = {20: None, # boş31: load_image("grass.png"),42: load_image("tree.png"),53: load_image("house.png")6}Adım 3: Haritayı Çiz
Dizi üzerinde döngü kur ve her tile'ı ekrana yerleştir.
1TILE_SIZE = 3223def draw_tilemap(screen, map_data, tile_sprites):4for row in range(len(map_data)):5for col in range(len(map_data[row])):6tile_id = map_data[row][col]7if tile_id!= 0: # boş tile çizme8x = col * TILE_SIZE9y = row * TILE_SIZE10screen.blit(tile_sprites[tile_id], (x, y))1112# Çıktı: Ekranda 5x5 grid, her tile 32x32 pikselAdım 4: Oyuncu Konumunu Tile'lara Çevir
Oyuncu piksel koordinatlarında hareket eder ama hangi tile'da olduğunu bulmak için bölme yap.
1player_x, player_y = 64, 96 # piksel cinsinden2tile_x = player_x // TILE_SIZE # 64 // 32 = 23tile_y = player_y // TILE_SIZE # 96 // 32 = 345if map_data[tile_y][tile_x] == 2: # ağaç üzerine geldi6print("Ağaca çarptın!")Tilemap sistemi sayesinde haritayı kolayca kaydedebilir, yükleyebilir ve dinamik olarak değiştirebilirsin. Binlerce nesne yerine tek bir sayı dizisi tutmak, bellek ve CPU'yu önemli ölçüde tasarruf ettiriyor. bknz: Isı Haritası ile Level Tasarımını Test Etme
1 yorum
tilemapin asıl güzelliği binlerce nesneyi tek bir sayı dizisine sıkıştırması çizim hızı da çok daha iyi oluyor çünkü sadece ekranda görünen tileları çiziyorsun