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 = ev

Adı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.

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası
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 = 32
2
3def 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 çizme
8x = col * TILE_SIZE
9y = row * TILE_SIZE
10screen.blit(tile_sprites[tile_id], (x, y))
11
12# Çıktı: Ekranda 5x5 grid, her tile 32x32 piksel

Adı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 cinsinden
2tile_x = player_x // TILE_SIZE # 64 // 32 = 2
3tile_y = player_y // TILE_SIZE # 96 // 32 = 3
4
5if map_data[tile_y][tile_x] == 2: # ağaç üzerine geldi
6print("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

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz
  • ufakbirnot

    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

  • adlı kullanıcıya yanıt verdi
    kodkafasi

    ama işin zorluğu collision detectionda başlıyor tile gride uymayan şeyler npc oyuncu ile tileları kontrol etmek can sıkıcı oluyor