{"id":32184,"date":"2025-10-18T19:01:40","date_gmt":"2025-10-18T16:01:40","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/pixalo-engine-ile-tilemap-olusturma-rehberi-adim-adim\/"},"modified":"2025-10-18T19:01:40","modified_gmt":"2025-10-18T16:01:40","slug":"pixalo-engine-ile-tilemap-olusturma-rehberi-adim-adim","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/pixalo-engine-ile-tilemap-olusturma-rehberi-adim-adim\/","title":{"rendered":"Pixalo Engine ile Tilemap Olu\u015fturma Rehberi: Ad\u0131m Ad\u0131m"},"content":{"rendered":"<p>2D oyun geli\u015ftirmede seviye tasar\u0131m\u0131, oyunun ak\u0131c\u0131l\u0131\u011f\u0131 ve oyuncu deneyimi i\u00e7in kritik \u00f6neme sahiptir. Peki, b\u00fcy\u00fck ve karma\u015f\u0131k oyun d\u00fcnyalar\u0131n\u0131 verimli bir \u015fekilde nas\u0131l olu\u015fturabiliriz? Bu rehberde, Pixalo Engine kullanarak g\u00fc\u00e7l\u00fc ve esnek tilemap&#8217;ler (d\u00f6\u015feme haritalar\u0131) olu\u015fturman\u0131n inceliklerini ad\u0131m ad\u0131m ke\u015ffedece\u011fiz. Performans odakl\u0131 ipu\u00e7lar\u0131ndan mobil uyumlulu\u011fa kadar, ba\u015ftan sona eksiksiz bir seviye tasar\u0131m s\u00fcrecine haz\u0131r olun.<\/p>\n<p>Oyun geli\u015ftirme d\u00fcnyas\u0131nda, \u00f6zellikle 2D oyunlarda, seviye tasar\u0131m\u0131 ve d\u00fcnya in\u015fas\u0131 \u00e7o\u011fu zaman zaman al\u0131c\u0131 ve kaynak yo\u011fun bir s\u00fcre\u00e7tir. Geleneksel y\u00f6ntemlerle her bir objeyi tek tek konumland\u0131rmak veya b\u00fcy\u00fck, tek par\u00e7a g\u00f6rseller kullanmak hem geli\u015ftirme s\u00fcresini uzat\u0131r hem de performans sorunlar\u0131na yol a\u00e7abilir. \u0130\u015fte tam bu noktada tilemap&#8217;ler devreye giriyor ve oyun geli\u015ftiricilerinin hayat\u0131n\u0131 kolayla\u015ft\u0131r\u0131yor. Tilemap, \u00f6nceden tan\u0131mlanm\u0131\u015f k\u00fc\u00e7\u00fck grafik par\u00e7ac\u0131klar\u0131n\u0131n (d\u00f6\u015femelerin) bir \u0131zgara sistemi \u00fczerinde d\u00fczenlenerek b\u00fcy\u00fck ve karma\u015f\u0131k seviyeler olu\u015fturma tekni\u011fidir. Bu y\u00f6ntem, sadece zamandan tasarruf etmekle kalmaz, ayn\u0131 zamanda oyununuzun performans\u0131n\u0131 da \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131r\u0131r.<\/p>\n<p>Bir d\u00f6\u015feme haritas\u0131 kullanman\u0131n en temel avantajlar\u0131ndan biri, tekrar kullan\u0131labilirli\u011fidir. Bir kez haz\u0131rlad\u0131\u011f\u0131n\u0131z ta\u015f, \u00e7imen, su veya yol d\u00f6\u015femelerini, farkl\u0131 kombinasyonlarda defalarca kullanarak tamamen yeni g\u00f6r\u00fcn\u00fcml\u00fc seviyeler tasarlayabilirsiniz. Bu durum, sanat varl\u0131klar\u0131n\u0131n \u00fcretim maliyetini d\u00fc\u015f\u00fcr\u00fcrken, tutarl\u0131 bir g\u00f6rsel stil yakalaman\u0131z\u0131 da sa\u011flar. \u00d6rne\u011fin, bir platform oyununda zemin, duvar ve engelleri temsil eden d\u00f6\u015femeleri kullanarak y\u00fczlerce farkl\u0131 b\u00f6l\u00fcm olu\u015fturmak m\u00fcmk\u00fcnd\u00fcr. Ayr\u0131ca, tilemap&#8217;ler genellikle oyun motorlar\u0131 taraf\u0131ndan optimize edilmi\u015f bir \u015fekilde i\u015flendi\u011fi i\u00e7in, b\u00fcy\u00fck bir haritay\u0131 tek bir resim olarak y\u00fcklemek yerine, sadece g\u00f6r\u00fcnen d\u00f6\u015femeleri \u00e7izerek bellek ve i\u015flemci kullan\u0131m\u0131n\u0131 minimumda tutar\u0131z. Bu, \u00f6zellikle mobil cihazlar gibi s\u0131n\u0131rl\u0131 kaynaklara sahip platformlar i\u00e7in hayati bir \u00f6neme sahiptir.<\/p>\n<p>Performans\u0131n yan\u0131 s\u0131ra, tilemap&#8217;ler oyun mant\u0131\u011f\u0131 ve \u00e7arp\u0131\u015fma alg\u0131lamas\u0131 i\u00e7in de m\u00fckemmel bir temel sunar. Her bir d\u00f6\u015femenin belirli \u00f6zelliklere sahip olmas\u0131 (\u00f6rne\u011fin, ge\u00e7ilebilir, kat\u0131, zarar veren, etkile\u015fimli), oyun d\u00fcnyas\u0131ndaki nesnelerin ve karakterlerin bu d\u00f6\u015femelerle nas\u0131l etkile\u015fime girece\u011fini belirlememizi kolayla\u015ft\u0131r\u0131r. Bir d\u00f6\u015feme haritas\u0131 \u00fczerinde hareket eden bir oyuncunun, sadece bulundu\u011fu d\u00f6\u015femenin \u00f6zelliklerini kontrol ederek bir engelle \u00e7arp\u0131\u015f\u0131p \u00e7arp\u0131\u015fmad\u0131\u011f\u0131n\u0131 anlamak, her bir pikseli kontrol etmekten \u00e7ok daha verimlidir. Bu yap\u0131, yapay zeka navigasyonu (pathfinding) gibi karma\u015f\u0131k sistemlerin de \u00e7ok daha basit ve optimize edilmi\u015f bir \u015fekilde uygulanmas\u0131na olanak tan\u0131r. K\u0131sacas\u0131, tilemap&#8217;ler 2D oyun geli\u015ftirmenin temel ta\u015flar\u0131ndan biridir ve Pixalo Engine gibi modern oyun motorlar\u0131yla birle\u015fti\u011finde, hayal g\u00fcc\u00fcn\u00fcz\u00fc ger\u00e7e\u011fe d\u00f6n\u00fc\u015ft\u00fcrmek i\u00e7in size s\u0131n\u0131rs\u0131z olanaklar sunar.<\/p>\n<h2>Tilemap ve Pixalo Engine Temelleri Nelerdir?<\/h2>\n<p>Pixalo Engine ile etkili bir \u015fekilde tilemap&#8217;ler olu\u015fturmak i\u00e7in \u00f6ncelikle tilemap&#8217;in temel bile\u015fenlerini ve Pixalo Engine&#8217;in bu kavramlar\u0131 nas\u0131l ele ald\u0131\u011f\u0131n\u0131 anlamak gereklidir. Bir tilemap, ad\u0131ndan da anla\u015f\u0131laca\u011f\u0131 \u00fczere, &#8217;tile&#8217; ad\u0131 verilen k\u00fc\u00e7\u00fck, genellikle kare \u015feklindeki g\u00f6rsellerin bir harita d\u00fczeninde bir araya getirilmesiyle olu\u015fan bir yap\u0131d\u0131r. Bu yap\u0131n\u0131n iki ana bile\u015feni bulunur: <strong>Tileset (D\u00f6\u015feme Seti)<\/strong> ve <strong>Tile Data (D\u00f6\u015feme Verisi)<\/strong>.<\/p>\n<p><strong>Tileset (D\u00f6\u015feme Seti):<\/strong> Tileset, bir oyun seviyesinde kullanaca\u011f\u0131n\u0131z t\u00fcm benzersiz d\u00f6\u015feme g\u00f6rsellerini i\u00e7eren bir koleksiyondur. Genellikle bu g\u00f6rseller tek bir b\u00fcy\u00fck resim dosyas\u0131 (sprite sheet veya texture atlas) i\u00e7inde d\u00fczenlenir. \u00d6rne\u011fin, bir \u00e7imen d\u00f6\u015femesi, bir yol d\u00f6\u015femesi, bir su d\u00f6\u015femesi veya bir duvar d\u00f6\u015femesi bu setin i\u00e7inde yer alabilir. Pixalo Engine, bu t\u00fcr sprite sheet&#8217;leri kolayca ayr\u0131\u015ft\u0131rman\u0131za ve her bir d\u00f6\u015femeyi ayr\u0131 bir varl\u0131k olarak tan\u0131mlaman\u0131za olanak tan\u0131r. Bu sayede, motor her bir d\u00f6\u015femeyi ayr\u0131 ayr\u0131 y\u00fcklemek yerine, tek bir b\u00fcy\u00fck resmi belle\u011fe alarak belle\u011fi daha verimli kullan\u0131r ve render \u00e7a\u011fr\u0131s\u0131 say\u0131s\u0131n\u0131 azaltarak performans\u0131 art\u0131r\u0131r. Pixalo, tileset&#8217;leri y\u00f6netmek i\u00e7in sezgisel aray\u00fczler ve API&#8217;ler sunar, b\u00f6ylece geli\u015ftiriciler d\u00f6\u015feme boyutlar\u0131n\u0131, aral\u0131klar\u0131n\u0131 ve kenar bo\u015fluklar\u0131n\u0131 kolayca belirleyebilirler.<\/p>\n<p><strong>Tile Data (D\u00f6\u015feme Verisi):<\/strong> Tile data, seviyenizin ger\u00e7ek yap\u0131s\u0131n\u0131 tan\u0131mlayan bir matris veya 2D dizidir. Her bir h\u00fccre, tileset&#8217;teki belirli bir d\u00f6\u015femeyi (genellikle d\u00f6\u015femenin indeksini) temsil eder. \u00d6rne\u011fin, <code>map_data[0][0] = 5<\/code> ifadesi, haritan\u0131n sol \u00fcst k\u00f6\u015fesindeki d\u00f6\u015femenin, tileset&#8217;teki 5 numaral\u0131 d\u00f6\u015feme oldu\u011funu belirtir. Bu veri yap\u0131s\u0131, oyun motorunun hangi d\u00f6\u015femeyi hangi konumda \u00e7izece\u011fini bilmesini sa\u011flar. Pixalo Engine, bu veri yap\u0131s\u0131n\u0131 dahili olarak optimize edilmi\u015f bir \u015fekilde saklar ve h\u0131zl\u0131 eri\u015fim sa\u011flar. Ayr\u0131ca, birden fazla katman\u0131 destekleyerek, ayn\u0131 konumda birden fazla d\u00f6\u015femenin (\u00f6rne\u011fin, zemin, dekorasyon, \u00e7at\u0131lar) \u00fcst \u00fcste binmesine olanak tan\u0131r. Bu katmanlama \u00f6zelli\u011fi, \u00e7ok daha zengin ve detayl\u0131 seviyeler olu\u015fturman\u0131z\u0131 sa\u011flar. Pixalo&#8217;da bir tilemap nesnesi, genellikle bu tile data&#8217;y\u0131 ve hangi tileset ile ili\u015fkilendirildi\u011fini i\u00e7erir.<\/p>\n<p>Pixalo Engine, tilemap&#8217;leri do\u011frudan destekleyen g\u00fc\u00e7l\u00fc bir API seti sunar. Bu API&#8217;ler sayesinde, d\u00f6\u015feme setlerini kolayca y\u00fckleyebilir, harita verilerini olu\u015fturabilir veya d\u0131\u015far\u0131dan y\u00fckleyebilir, d\u00f6\u015femeleri sahneye \u00e7izebilir, hatta \u00e7al\u0131\u015fma zaman\u0131nda d\u00f6\u015femeleri dinamik olarak de\u011fi\u015ftirebilirsiniz. Pixalo&#8217;nun GPU h\u0131zland\u0131rmal\u0131 rendering pipeline&#8217;\u0131, binlerce d\u00f6\u015femeyi bile ak\u0131c\u0131 bir \u015fekilde ekrana getirebilir. Ayr\u0131ca, Pixalo&#8217;nun dahili edit\u00f6r veya harici ara\u00e7larla entegrasyon yetenekleri, Tiled Map Editor gibi pop\u00fcler ara\u00e7larla olu\u015fturulan tilemap&#8217;leri do\u011frudan i\u00e7eri aktarman\u0131za olanak tan\u0131yarak geli\u015ftirme s\u00fcrecinizi daha da h\u0131zland\u0131r\u0131r. Pixalo, geli\u015ftiricilerin sadece g\u00f6rsellikle kalmay\u0131p, her bir d\u00f6\u015femeye \u00f6zel \u00e7arp\u0131\u015fma \u00f6zellikleri, animasyon durumlar\u0131 veya etkile\u015fim betikleri atamas\u0131na da izin vererek, seviye tasar\u0131m\u0131n\u0131 daha i\u015flevsel hale getirir. Bu temelleri anlad\u0131ktan sonra, Pixalo Engine ile kendi tilemap&#8217;lerinizi olu\u015fturmaya haz\u0131rs\u0131n\u0131z demektir.<\/p>\n<h2>Pixalo Engine&#8217;de Tileset Nas\u0131l Haz\u0131rlan\u0131r? Ad\u0131m Ad\u0131m Rehber<\/h2>\n<p>Pixalo Engine&#8217;de bir tilemap olu\u015fturman\u0131n ilk ve en \u00f6nemli ad\u0131m\u0131, kullan\u0131lacak olan tileset&#8217;i (d\u00f6\u015feme seti) haz\u0131rlamakt\u0131r. Tileset, oyununuzun g\u00f6rsel stilini ve hissini belirleyecek olan temel yap\u0131 ta\u015f\u0131d\u0131r. Bu s\u00fcre\u00e7, genellikle bir grafik d\u00fczenleme yaz\u0131l\u0131m\u0131nda (Photoshop, GIMP, Aseprite vb.) ba\u015flar ve Pixalo Engine&#8217;de tileset&#8217;in motor taraf\u0131ndan do\u011fru bir \u015fekilde tan\u0131nmas\u0131yla devam eder. \u0130\u015fte Pixalo Engine&#8217;de bir tileset haz\u0131rlama ve y\u00fckleme s\u00fcreci ad\u0131m ad\u0131m:<\/p>\n<h3>G\u00f6rsel Kaynaklar\u0131n Olu\u015fturulmas\u0131 ve D\u00fczenlenmesi<\/h3>\n<p>\u00d6ncelikle, oyununuzda kullanmak istedi\u011finiz t\u00fcm d\u00f6\u015feme g\u00f6rsellerini tek bir b\u00fcy\u00fck resim dosyas\u0131 (sprite sheet) i\u00e7inde d\u00fczenlemeniz gerekir. Bu sprite sheet&#8217;teki her bir d\u00f6\u015femenin ayn\u0131 boyutta olmas\u0131 (\u00f6rne\u011fin, 16&#215;16 piksel, 32&#215;32 piksel) ve aralar\u0131nda belirli bir bo\u015fluk (padding) veya kenar bo\u015flu\u011fu (margin) olmas\u0131 \u00f6nemlidir. Bu d\u00fczenleme, Pixalo Engine&#8217;in her bir d\u00f6\u015femeyi do\u011fru bir \u015fekilde ayr\u0131\u015ft\u0131rmas\u0131n\u0131 sa\u011flar. Genellikle, d\u00f6\u015femeler aras\u0131nda 1 piksel bo\u015fluk b\u0131rakmak, kenarlar\u0131n yanl\u0131\u015fl\u0131kla di\u011fer d\u00f6\u015femelerin piksel verilerini i\u00e7ermesini engeller. Bir vaka analizi olarak, retro tarz\u0131 bir piksel sanat oyununda, 16&#215;16 piksel boyutunda bir\u00e7ok farkl\u0131 zemin, duvar ve dekorasyon d\u00f6\u015femesini tek bir 256&#215;256 piksel sprite sheet i\u00e7inde d\u00fczenleyebiliriz. Her d\u00f6\u015femenin belirli bir indekse sahip olaca\u011f\u0131n\u0131 unutmay\u0131n; bu indeksler tilemap verimizde kullan\u0131lacakt\u0131r.<\/p>\n<h3>Pixalo Engine&#8217;e Tileset&#8217;i Tan\u0131tma<\/h3>\n<p>Sprite sheet&#8217;inizi haz\u0131rlay\u0131p oyun projenizin kaynaklar klas\u00f6r\u00fcne kaydettikten sonra, Pixalo Engine&#8217;e bu g\u00f6rseli bir tileset olarak tan\u0131mlaman\u0131z gerekir. Pixalo, bunun i\u00e7in \u00f6zel bir <code>Tileset<\/code> s\u0131n\u0131f\u0131 sunar. Bu s\u0131n\u0131f, sprite sheet&#8217;inizi y\u00fcklemenize ve her bir d\u00f6\u015femenin boyutunu, bo\u015fluklar\u0131n\u0131 ve kenar bo\u015fluklar\u0131n\u0131 belirtmenize olanak tan\u0131r. A\u015fa\u011f\u0131daki kod blo\u011fu, bu i\u015flemi nas\u0131l yapaca\u011f\u0131n\u0131z\u0131 g\u00f6stermektedir:<\/p>\n<pre><code>\n\/\/ 1. Sprite sheet dosyas\u0131n\u0131 y\u00fckle\nconst tilesetTexture = Pixalo.Resources.loadTexture(\"assets\/my_tileset.png\");\n\n\/\/ 2. Yeni bir Tileset nesnesi olu\u015ftur\n\/\/ Parametreler: (texture, tileWidth, tileHeight, tileSpacing, tileMargin)\n\/\/ tileWidth ve tileHeight: Her bir d\u00f6\u015femenin piksel cinsinden geni\u015fli\u011fi ve y\u00fcksekli\u011fi\n\/\/ tileSpacing: D\u00f6\u015femeler aras\u0131ndaki bo\u015fluk (genellikle 1 veya 0)\n\/\/ tileMargin: Resmin kenar\u0131ndaki bo\u015fluk (genellikle 0)\nconst myTileset = new Pixalo.Tileset(tilesetTexture, 16, 16, 1, 0);\n\n\/\/ Tileset'i global olarak eri\u015filebilir bir yere kaydet veya bir y\u00f6neticiye ekle\nPixalo.AssetManager.add(\"main_tileset\", myTileset);\nconsole.log(\"Tileset ba\u015far\u0131yla y\u00fcklendi ve Pixalo Engine'e tan\u0131t\u0131ld\u0131.\");\n\n<\/pre>\n<p><\/code><\/p>\n<p>Bu kod par\u00e7as\u0131, <code>my_tileset.png<\/code> adl\u0131 sprite sheet dosyas\u0131n\u0131 belle\u011fe y\u00fckler ve ard\u0131ndan 16x16 piksel boyutunda d\u00f6\u015femeler i\u00e7eren, aralar\u0131nda 1 piksel bo\u015fluk bulunan bir <code>Tileset<\/code> nesnesi olu\u015fturur. <code>Pixalo.AssetManager.add<\/code> fonksiyonu ile bu tileset'i projenin genel varl\u0131k y\u00f6netimine ekleyerek daha sonra kolayca eri\u015filebilir hale getiriyoruz. Bu, \u00f6zellikle b\u00fcy\u00fck projelerde farkl\u0131 tileset'leri y\u00f6netmek i\u00e7in \u00e7ok kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<aside class=\"tip\">\n  Uzman \u0130pucu: Tileset'lerinizi olu\u015ftururken, her d\u00f6\u015femenin kenarlar\u0131n\u0131n net oldu\u011fundan ve kom\u015fu d\u00f6\u015femelerden piksel almad\u0131\u011f\u0131ndan emin olun. Aksi takdirde, oyun i\u00e7inde d\u00f6\u015femeler aras\u0131nda ince \u00e7izgiler (seams) g\u00f6r\u00fcnebilir. Pixalo, bu t\u00fcr sorunlar\u0131 minimize etmek i\u00e7in genellikle mipmap'leri devre d\u0131\u015f\u0131 b\u0131rak\u0131r veya kenar piksel tekrar\u0131 (edge clamping) kullan\u0131r, ancak g\u00f6rsel kayna\u011f\u0131n\u0131z\u0131n temiz olmas\u0131 en iyisidir.<br \/>\n<\/aside>\n<p>Haz\u0131rl\u0131k a\u015famas\u0131nda, d\u00f6\u015femelerinizi kategorize etmek de faydal\u0131 olabilir. \u00d6rne\u011fin, zemin d\u00f6\u015femeleri i\u00e7in 0-19, duvarlar i\u00e7in 20-39 gibi indeks aral\u0131klar\u0131 belirleyerek tilemap verilerinizi daha d\u00fczenli hale getirebilirsiniz. Bu, karma\u015f\u0131k haritalarda d\u00f6\u015feme se\u00e7imi yaparken hata yapma olas\u0131l\u0131\u011f\u0131n\u0131 azalt\u0131r. Pixalo Engine'in tileset sistemi, bu t\u00fcr d\u00fczenlemeleri esnek bir \u015fekilde destekler ve geli\u015ftiricilere kendi d\u00fczenleme stratejilerini uygulama \u00f6zg\u00fcrl\u00fc\u011f\u00fc sunar. Bir sonraki ad\u0131mda, bu haz\u0131rlad\u0131\u011f\u0131m\u0131z tileset'i kullanarak harita katmanlar\u0131m\u0131z\u0131 ve veri yap\u0131lar\u0131m\u0131z\u0131 nas\u0131l olu\u015fturaca\u011f\u0131m\u0131z\u0131 inceleyece\u011fiz.<\/p>\n<h2>D\u00f6\u015feme Haritas\u0131 Katmanlar\u0131 ve Veri Yap\u0131lar\u0131: Nas\u0131l Olu\u015fturulur?<\/h2>\n<p>Tileset'imiz haz\u0131r oldu\u011funa g\u00f6re, art\u0131k oyun d\u00fcnyam\u0131z\u0131 olu\u015fturan as\u0131l yap\u0131ya, yani d\u00f6\u015feme haritas\u0131 katmanlar\u0131na ve bunlar\u0131 temsil eden veri yap\u0131lar\u0131na odaklanabiliriz. Bir tilemap, tek bir g\u00f6rsel katmandan olu\u015fabilece\u011fi gibi, daha zengin ve derinlikli seviyeler i\u00e7in birden fazla katmana sahip olabilir. \u00d6rne\u011fin, bir zemin katman\u0131, \u00fczerinde dekorasyon katman\u0131 ve en \u00fcstte \u00e7at\u0131lar veya etkile\u015fimli nesneler i\u00e7in ayr\u0131 bir katman bulunabilir. Pixalo Engine, bu katmanl\u0131 yap\u0131y\u0131 destekleyerek geli\u015ftiricilere b\u00fcy\u00fck bir esneklik sunar.<\/p>\n<h3>Tek Katmanl\u0131 ve \u00c7ok Katmanl\u0131 D\u00f6\u015feme Haritalar\u0131<\/h3>\n<p><strong>Tek Katmanl\u0131 Haritalar:<\/strong> En basit haliyle, bir tilemap tek bir 2D dizi (matris) ile temsil edilir. Bu dizi, haritan\u0131n her bir h\u00fccresindeki d\u00f6\u015femenin indeksini tutar. Genellikle, s\u0131f\u0131r veya negatif bir de\u011fer, o h\u00fccrede d\u00f6\u015feme olmad\u0131\u011f\u0131n\u0131 (bo\u015fluk) belirtir. K\u00fc\u00e7\u00fck, basit oyunlar veya performans\u0131n kritik oldu\u011fu durumlar i\u00e7in tek katmanl\u0131 haritalar yeterli olabilir. \u00d6rne\u011fin, bir Tetris benzeri oyunda sadece mevcut bloklar\u0131 temsil eden tek bir katman yeterlidir.<\/p>\n<p><strong>\u00c7ok Katmanl\u0131 Haritalar:<\/strong> \u00c7o\u011fu modern 2D oyunda, daha zengin g\u00f6rsel efektler ve oynan\u0131\u015f derinli\u011fi i\u00e7in \u00e7ok katmanl\u0131 tilemap'ler tercih edilir. Her katman, kendi 2D dizisi ile temsil edilir ve kendi tileset'ine sahip olabilir veya ayn\u0131 tileset'i payla\u015fabilir. \u00d6rne\u011fin:<\/p>\n<ul>\n<li><strong>Zemin Katman\u0131 (Background Layer):<\/strong> \u00c7imen, toprak, su gibi temel zemin d\u00f6\u015femelerini i\u00e7erir.<\/li>\n<li><strong>Objekt Katman\u0131 (Object Layer):<\/strong> A\u011fa\u00e7lar, kayalar, binalar, kap\u0131lar gibi interaktif veya sabit objeleri i\u00e7erir.<\/li>\n<li><strong>\u00d6n Plan Katman\u0131 (Foreground Layer):<\/strong> Oyun karakterinin veya di\u011fer objelerin \u00f6n\u00fcnden ge\u00e7en objeleri (\u00f6rne\u011fin, dallar, bulutlar, efektler) i\u00e7erir.<\/li>\n<\/ul>\n<p>Pixalo Engine'de, bu katmanlar genellikle ayr\u0131 <code>TilemapLayer<\/code> nesneleri olarak y\u00f6netilir. Her <code>TilemapLayer<\/code> kendi <code>tileset<\/code> referans\u0131na ve kendi <code>tile_data<\/code> matrisine sahiptir. Bu, farkl\u0131 katmanlar i\u00e7in farkl\u0131 \u00e7\u00f6z\u00fcn\u00fcrl\u00fcklerde veya temalarda d\u00f6\u015feme setleri kullanman\u0131za olanak tan\u0131r. Bir vaka analizi olarak, bir RPG oyununda, y\u00fcr\u00fcnebilir zeminler i\u00e7in bir katman, duvarlar ve engeller i\u00e7in ba\u015fka bir katman ve son olarak, oyuncunun arkas\u0131nda veya \u00f6n\u00fcnde duran a\u011fa\u00e7lar veya binalar gibi dekoratif \u00f6\u011feler i\u00e7in bir \u00f6n plan katman\u0131 kullanabiliriz. Bu yakla\u015f\u0131m, haritam\u0131z\u0131 hem g\u00f6rsel olarak zenginle\u015ftirir hem de oyun mant\u0131\u011f\u0131n\u0131 daha mod\u00fcler hale getirir.<\/p>\n<h3>Pixalo Engine'de D\u00f6\u015feme Verisi Olu\u015fturma<\/h3>\n<p>Tilemap verisi, genellikle bir text dosyas\u0131 (CSV, JSON), bir Tiled Map Editor \u00e7\u0131kt\u0131s\u0131 veya do\u011frudan kod i\u00e7inde bir 2D dizi olarak depolanabilir. En basit yol, k\u00fc\u00e7\u00fck haritalar i\u00e7in kodu kullanmakt\u0131r. Pixalo Engine'de temel bir tilemap katman\u0131 olu\u015fturmak i\u00e7in a\u015fa\u011f\u0131daki gibi bir yakla\u015f\u0131m izleyebiliriz:<\/p>\n<pre><code>\n\/\/ \u00d6nceki ad\u0131mda tan\u0131mlad\u0131\u011f\u0131m\u0131z tileset'i alal\u0131m\nconst mainTileset = Pixalo.AssetManager.get(\"main_tileset\");\n\n\/\/ Haritan\u0131n geni\u015fli\u011fi ve y\u00fcksekli\u011fi (d\u00f6\u015feme birimi cinsinden)\nconst mapWidth = 20;\nconst mapHeight = 15;\n\n\/\/ Harita verisi i\u00e7in 2D dizi olu\u015fturma\nlet mapData = [];\nfor (let y = 0; y < mapHeight; y++) {\n    mapData[y] = [];\n    for (let x = 0; x < mapWidth; x++) {\n        \/\/ Ge\u00e7ici olarak t\u00fcm d\u00f6\u015femeleri 0 (ilk d\u00f6\u015feme) olarak ayarla\n        \/\/ Ger\u00e7ek bir haritada bu veriler bir dosyadan y\u00fcklenecektir\n        mapData[y][x] = 0;\n    }\n}\n\n\/\/ \u00d6rnek bir harita deseni olu\u015fturma (basit zemin ve birka\u00e7 duvar)\n\/\/ D\u00f6\u015feme indeksleri tileset'inizdeki s\u0131raya g\u00f6re de\u011fi\u015fecektir.\n\/\/ Varsayal\u0131m ki: 0 = bo\u015fluk, 1 = \u00e7imen, 2 = ta\u015f duvar\nfor (let y = 0; y < mapHeight; y++) {\n    for (let x = 0; x < mapWidth; x++) {\n        if (y === 0 || y === mapHeight - 1 || x === 0 || x === mapWidth - 1) {\n            mapData[y][x] = 2; \/\/ S\u0131n\u0131rlar\u0131 ta\u015f duvar yap\n        } else if (Math.random() < 0.1) {\n            mapData[y][x] = 2; \/\/ Rastgele ta\u015f d\u00f6\u015femeler\n        } else {\n            mapData[y][x] = 1; \/\/ Geri kalanlar\u0131 \u00e7imen yap\n        }\n    }\n}\n\n\/\/ Yeni bir TilemapLayer nesnesi olu\u015ftur\n\/\/ Parametreler: (tileset, mapData, mapWidth, mapHeight)\nconst groundLayer = new Pixalo.TilemapLayer(mainTileset, mapData, mapWidth, mapHeight);\n\n\/\/ Katman\u0131 sahneye ekle veya bir y\u00f6neticiye kaydet\nPixalo.SceneManager.addLayer(\"ground_layer\", groundLayer);\nconsole.log(\"Zemin katman\u0131 ba\u015far\u0131yla olu\u015fturuldu ve sahneye eklendi.\");\n\n<\/pre>\n<p><\/code><\/p>\n<p>Bu \u00f6rnekte, \u00f6nce bo\u015f bir 2D dizi olu\u015fturuyoruz, ard\u0131ndan bu diziyi rastgele bir zemin ve duvar deseniyle dolduruyoruz. Daha sonra bu veriyi ve daha \u00f6nce tan\u0131mlad\u0131\u011f\u0131m\u0131z <code>mainTileset<\/code>'i kullanarak bir <code>Pixalo.TilemapLayer<\/code> nesnesi olu\u015fturuyoruz. Son olarak, bu katman\u0131 Pixalo'nun sahne y\u00f6neticisine ekleyerek render edilebilir hale getiriyoruz. Karma\u015f\u0131k haritalar i\u00e7in, genellikle Tiled Map Editor gibi ara\u00e7lar kullan\u0131l\u0131r ve bu ara\u00e7lar\u0131n d\u0131\u015fa aktard\u0131\u011f\u0131 JSON veya XML dosyalar\u0131 Pixalo Engine i\u00e7inde ayr\u0131\u015ft\u0131r\u0131larak <code>mapData<\/code> dizisi olu\u015fturulur. Bu, seviye tasar\u0131mc\u0131lar\u0131n\u0131n kod yazmadan g\u00f6rsel olarak haritalar\u0131n\u0131 olu\u015fturmalar\u0131na olanak tan\u0131r ve geli\u015ftirme s\u00fcrecini \u00f6nemli \u00f6l\u00e7\u00fcde h\u0131zland\u0131r\u0131r.<\/p>\n<h2>Pixalo Engine ile Tilemap'i Sahneye Nas\u0131l Render Ederiz?<\/h2>\n<p>Tileset'imiz ve harita katmanlar\u0131m\u0131z haz\u0131r oldu\u011funa g\u00f6re, s\u0131ra geldi bu g\u00f6rsel verileri oyun sahnesinde g\u00f6r\u00fcn\u00fcr hale getirmeye. Pixalo Engine, optimize edilmi\u015f bir render pipeline'\u0131 sayesinde tilemap'leri y\u00fcksek performansla \u00e7izebilir. Bu s\u00fcre\u00e7, genellikle oyun d\u00f6ng\u00fcs\u00fcn\u00fcn <code>update()<\/code> veya <code>render()<\/code> fonksiyonu i\u00e7inde ger\u00e7ekle\u015fir ve kamera konumuna g\u00f6re sadece g\u00f6r\u00fcnen d\u00f6\u015femelerin \u00e7izilmesini (culling) i\u00e7erir.<\/p>\n<h3>Render S\u00fcrecinin Mant\u0131\u011f\u0131<\/h3>\n<p>Bir tilemap'i render etmek i\u00e7in Pixalo Engine, her bir <code>TilemapLayer<\/code>'\u0131n <code>mapData<\/code>'s\u0131n\u0131 tarar. Kamera (viewport) taraf\u0131ndan g\u00f6r\u00fcnen alandaki her d\u00f6\u015feme i\u00e7in, ilgili tileset'ten do\u011fru g\u00f6rseli se\u00e7er ve ekranda do\u011fru konuma \u00e7izer. Bu, binlerce d\u00f6\u015femenin bulundu\u011fu b\u00fcy\u00fck haritalarda bile ak\u0131c\u0131 bir deneyim sa\u011flamak i\u00e7in kritik \u00f6neme sahiptir. Pixalo, bu i\u015flemi genellikle GPU \u00fczerinde toplu \u00e7izim \u00e7a\u011fr\u0131lar\u0131 (batch rendering) kullanarak ger\u00e7ekle\u015ftirir, bu da CPU y\u00fck\u00fcn\u00fc azalt\u0131r.<\/p>\n<h3>Pixalo Engine'de Tilemap Render Etme<\/h3>\n<p>\u00d6nceki b\u00f6l\u00fcmde olu\u015fturdu\u011fumuz <code>groundLayer<\/code>'\u0131 varsayarak, Pixalo'nun render d\u00f6ng\u00fcs\u00fcnde bu katman\u0131 nas\u0131l \u00e7izece\u011fimizi g\u00f6sterelim. Pixalo Engine'in render d\u00f6ng\u00fcs\u00fc genellikle a\u015fa\u011f\u0131daki gibi bir yap\u0131ya sahiptir:<\/p>\n<pre><code>\n\/\/ Oyun D\u00f6ng\u00fcs\u00fc Ba\u015flang\u0131c\u0131\nfunction gameLoop() {\n    \/\/ ... (Di\u011fer oyun mant\u0131\u011f\u0131 g\u00fcncellemeleri) ...\n\n    Pixalo.Graphics.clearScreen(); \/\/ Ekran\u0131 temizle\n    Pixalo.Camera.update(); \/\/ Kameray\u0131 g\u00fcncelle (oyuncu takibi vb.)\n\n    \/\/ Tilemap Katman\u0131n\u0131 Render Etme\n    \/\/ Varsayal\u0131m ki Pixalo.SceneManager, t\u00fcm aktif katmanlar\u0131 s\u0131ras\u0131yla render ediyor\n    const groundLayer = Pixalo.SceneManager.getLayer(\"ground_layer\");\n    if (groundLayer) {\n        \/\/ Pixalo'nun TilemapLayer s\u0131n\u0131f\u0131, kendi render metoduna sahiptir.\n        \/\/ Kamera bilgileri otomatik olarak dahili olarak kullan\u0131l\u0131r.\n        groundLayer.render(Pixalo.Camera);\n    }\n\n    \/\/ ... (Di\u011fer oyun objelerini, UI'\u0131 render et) ...\n\n    requestAnimationFrame(gameLoop); \/\/ Bir sonraki kareyi iste\n}\n\n\/\/ Oyun ba\u015flad\u0131\u011f\u0131nda d\u00f6ng\u00fcy\u00fc ba\u015flat\n\/\/ gameLoop();\n\n<\/pre>\n<p><\/code><\/p>\n<p>Yukar\u0131daki kod blo\u011fu, tipik bir oyun d\u00f6ng\u00fcs\u00fcnde tilemap'in nas\u0131l render edilebilece\u011fini g\u00f6stermektedir. <code>Pixalo.Graphics.clearScreen()<\/code> ile her kare ba\u015f\u0131nda ekran temizlenir. <code>Pixalo.Camera.update()<\/code> fonksiyonu, kameran\u0131n konumunu ve yak\u0131nla\u015ft\u0131rma seviyesini g\u00fcnceller. Bu kamera bilgisi, <code>groundLayer.render(Pixalo.Camera)<\/code> metodunda kullan\u0131larak sadece kameran\u0131n g\u00f6r\u00fc\u015f alan\u0131ndaki d\u00f6\u015femelerin \u00e7izilmesi sa\u011flan\u0131r. Bu i\u015flem, <strong>frustum culling<\/strong> olarak bilinir ve performans\u0131 ciddi \u015fekilde art\u0131ran bir optimizasyondur. \u00d6rne\u011fin, 1000x1000 d\u00f6\u015femelik bir haritada, e\u011fer kamera sadece 20x15 d\u00f6\u015femelik bir alan\u0131 g\u00f6r\u00fcyorsa, motor sadece bu ~300 d\u00f6\u015femeyi render eder, milyonlarca d\u00f6\u015femeyi de\u011fil.<\/p>\n<aside class=\"tip\">\n  Uzman \u0130pucu: \u00c7ok katmanl\u0131 tilemap'lerde katmanlar\u0131n do\u011fru s\u0131rada \u00e7izilmesi \u00f6nemlidir. \u00d6rne\u011fin, zemin katman\u0131 her zaman dekorasyon katman\u0131ndan \u00f6nce \u00e7izilmelidir, aksi takdirde objeler zeminin alt\u0131nda kalabilir. Pixalo Engine'in <code>SceneManager<\/code>'\u0131 genellikle katmanlar\u0131 eklenme s\u0131ras\u0131na veya belirli bir z-indeks de\u011ferine g\u00f6re render eder.<br \/>\n<\/aside>\n<h3>Mobil Uyumluluk ve Optimizasyon<\/h3>\n<p>Mobil cihazlarda performans kritik oldu\u011fundan, Pixalo Engine'in render s\u00fcre\u00e7leri mobil uyumlu olacak \u015fekilde tasarlanm\u0131\u015ft\u0131r. Ancak, geli\u015ftirici olarak siz de baz\u0131 optimizasyonlar\u0131 yapmal\u0131s\u0131n\u0131z:<\/p>\n<ul>\n<li><strong>D\u00f6\u015feme Boyutlar\u0131:<\/strong> Mobil cihazlar i\u00e7in daha k\u00fc\u00e7\u00fck d\u00f6\u015feme boyutlar\u0131 (\u00f6rne\u011fin 16x16 veya 32x32 piksel) tercih etmek, daha az pikselin i\u015flenmesini sa\u011flar.<\/li>\n<li><strong>Katman Say\u0131s\u0131:<\/strong> Gereksiz katmanlardan ka\u00e7\u0131n\u0131n. Her katman ek bir render \u00e7a\u011fr\u0131s\u0131 gerektirebilir.<\/li>\n<li><strong>Dinamik Render \u00c7\u00f6z\u00fcn\u00fcrl\u00fc\u011f\u00fc:<\/strong> Mobil cihazlarda daha d\u00fc\u015f\u00fck \u00e7\u00f6z\u00fcn\u00fcrl\u00fckte render yap\u0131p, ard\u0131ndan ekran boyutuna \u00f6l\u00e7eklendirme, performans\u0131 art\u0131rabilir. Pixalo, bu t\u00fcr \u00f6l\u00e7eklendirmeyi genellikle otomatik olarak y\u00f6netir.<\/li>\n<\/ul>\n<p>A\u015fa\u011f\u0131da, HTML i\u00e7inde mobil uyumlulu\u011fu sa\u011flamak i\u00e7in kullan\u0131labilecek basit bir CSS media query \u00f6rne\u011fi verilmi\u015ftir. Bu, Pixalo Engine'in \u00e7al\u0131\u015ft\u0131\u011f\u0131 Canvas elementinin veya oyun kapsay\u0131c\u0131s\u0131n\u0131n mobil cihazlarda nas\u0131l \u00f6l\u00e7eklenebilece\u011fine dair bir fikir verir:<\/p>\n<pre><code>\n\/* Mobil uyumluluk i\u00e7in CSS \u00f6rne\u011fi *\/\n@media screen and (max-width: 768px) {\n    #game-canvas {\n        width: 100vw;   \/* Ekran geni\u015fli\u011finin tamam\u0131n\u0131 kapla *\/\n        height: auto;   \/* Oran\u0131 koru *\/\n        max-height: 80vh; \/* Y\u00fcksekli\u011fin maksimum %80'ini kullan *\/\n    }\n    .game-container {\n        padding: 0;\n        margin: 0;\n    }\n}\n\n<\/pre>\n<p><\/code><\/p>\n<p>Bu CSS, 768 pikselden daha dar ekranlarda (\u00e7o\u011fu telefon ve tablet) oyun canvas'\u0131n\u0131n ekran geni\u015fli\u011finin tamam\u0131n\u0131 kaplamas\u0131n\u0131 ve y\u00fcksekli\u011finin otomatik olarak ayarlanmas\u0131n\u0131 sa\u011flar. Pixalo Engine'in kendisi render \u00e7\u00f6z\u00fcn\u00fcrl\u00fc\u011f\u00fcn\u00fc ve viewport'u y\u00f6netse de, HTML\/CSS seviyesinde bu t\u00fcr d\u00fczenlemeler kullan\u0131c\u0131n\u0131n cihaz\u0131na daha iyi adapte olan bir deneyim sunar. Tilemap'inizi ba\u015far\u0131l\u0131 bir \u015fekilde render etti\u011finizde, art\u0131k oyun d\u00fcnyan\u0131z g\u00f6rsel olarak canlanmaya ba\u015flar. Bir sonraki ad\u0131mda, bu d\u00fcnyadaki objelerin ve karakterlerin d\u00f6\u015femelerle nas\u0131l etkile\u015fime girece\u011fini, yani \u00e7arp\u0131\u015fma alg\u0131lamas\u0131n\u0131 ele alaca\u011f\u0131z.<\/p>\n<h2>\u00c7arp\u0131\u015fma Alg\u0131lama ve Etkile\u015fim: Tilemap'i Canland\u0131rmak<\/h2>\n<p>Oyun d\u00fcnyan\u0131z\u0131n g\u00f6rsel olarak sahnedeki yerini almas\u0131 harika, ancak bir oyunun ger\u00e7ekten canlanmas\u0131 i\u00e7in karakterlerin ve di\u011fer objelerin bu d\u00fcnya ile etkile\u015fime girmesi gerekir. Tilemap tabanl\u0131 oyunlarda \u00e7arp\u0131\u015fma alg\u0131lama, performans ve do\u011fruluk a\u00e7\u0131s\u0131ndan kritik bir s\u00fcre\u00e7tir. Pixalo Engine, d\u00f6\u015feme haritalar\u0131yla etkile\u015fimi kolayla\u015ft\u0131ran mekanizmalar sunarak, karakterlerin duvarlardan ge\u00e7mesini engellemek veya belirli alanlara girdi\u011finde \u00f6zel eylemleri tetiklemek gibi i\u015flevleri basitle\u015ftirir.<\/p>\n<h3>Tilemap Tabanl\u0131 \u00c7arp\u0131\u015fma Mant\u0131\u011f\u0131<\/h3>\n<p>Geleneksel olarak, her bir oyun objesi i\u00e7in ayr\u0131 ayr\u0131 \u00e7arp\u0131\u015fma kutular\u0131 veya poligonlar olu\u015fturmak ve bunlar\u0131 di\u011fer objelerle kar\u015f\u0131la\u015ft\u0131rmak, \u00f6zellikle \u00e7ok say\u0131da objenin bulundu\u011fu b\u00fcy\u00fck seviyelerde performans sorunlar\u0131na yol a\u00e7abilir. Tilemap tabanl\u0131 \u00e7arp\u0131\u015fma alg\u0131lamada ise, bu s\u00fcre\u00e7 \u00e7ok daha optimize edilmi\u015f bir yakla\u015f\u0131mla ele al\u0131n\u0131r:<\/p>\n<ol>\n<li><strong>D\u00f6\u015feme \u00d6zellikleri:<\/strong> Her bir d\u00f6\u015femeye, \u00e7arp\u0131\u015fma \u00f6zelliklerini belirten bir \"t\u00fcr\" veya \"\u00f6zellik\" atan\u0131r. \u00d6rne\u011fin:\n<ul>\n<li><code>0<\/code>: Ge\u00e7ilebilir (\u00c7imen, yol)<\/li>\n<li><code>1<\/code>: Kat\u0131 (Duvar, kaya)<\/li>\n<li><code>2<\/code>: Su (Yava\u015flat\u0131c\u0131, bo\u011fulma)<\/li>\n<li><code>3<\/code>: Tuzak (Hasar veren)<\/li>\n<li><code>4<\/code>: Etkile\u015fimli (Kap\u0131, sand\u0131k)<\/li>\n<\/ul>\n<\/li>\n<li><strong>Konum Tabanl\u0131 Kontrol:<\/strong> Bir oyun karakteri hareket etti\u011finde, karakterin kapsad\u0131\u011f\u0131 veya hareket etmek istedi\u011fi hedef d\u00f6\u015femenin \u00f6zelliklerini kontrol ederiz. E\u011fer hedef d\u00f6\u015feme \"kat\u0131\" ise, karakterin o y\u00f6ne hareket etmesini engelleriz.<\/li>\n<li><strong>Basit ve Verimli:<\/strong> Bu y\u00f6ntem, karma\u015f\u0131k geometrik hesaplamalar yerine basit bir dizi indeks okumas\u0131na dayand\u0131\u011f\u0131 i\u00e7in son derece h\u0131zl\u0131d\u0131r.<\/li>\n<\/ol>\n<h3>Pixalo Engine'de \u00c7arp\u0131\u015fma Alg\u0131lama Uygulamas\u0131<\/h3>\n<p>Pixalo Engine, <code>TilemapLayer<\/code> nesnelerinize d\u00f6\u015feme \u00f6zelliklerini ba\u011flaman\u0131z i\u00e7in esnek yollar sunar. Genellikle, tileset'inizdeki her bir d\u00f6\u015feme indeksine kar\u015f\u0131l\u0131k gelen \u00e7arp\u0131\u015fma verilerini ayr\u0131 bir dizi veya harita olarak tutars\u0131n\u0131z. Bu veri, bir d\u00f6\u015femenin kat\u0131 olup olmad\u0131\u011f\u0131n\u0131 veya \u00f6zel bir davran\u0131\u015fa sahip olup olmad\u0131\u011f\u0131n\u0131 belirtir.<\/p>\n<pre><code>\n\/\/ Varsayal\u0131m ki tileset'imizdeki d\u00f6\u015femelerin \u00e7arp\u0131\u015fma \u00f6zellikleri var\n\/\/ Bu dizi, tileset'teki her d\u00f6\u015feme indeksine kar\u015f\u0131l\u0131k gelen bir \u00f6zellik tutuyor\n\/\/ \u00d6rnek: 0=ge\u00e7ilebilir, 1=kat\u0131, 2=su\nconst tileCollisionProperties = [\n    0, \/\/ D\u00f6\u015feme 0 (bo\u015fluk) - ge\u00e7ilebilir\n    0, \/\/ D\u00f6\u015feme 1 (\u00e7imen) - ge\u00e7ilebilir\n    1, \/\/ D\u00f6\u015feme 2 (ta\u015f duvar) - kat\u0131\n    0, \/\/ ... di\u011fer d\u00f6\u015femeler\n];\n\n\/\/ Bir karakterin harita \u00fczerinde hareketini kontrol eden fonksiyon\nfunction checkCollision(characterX, characterY, deltaX, deltaY, layer) {\n    \/\/ Karakterin potansiyel yeni konumu\n    const targetX = characterX + deltaX;\n    const targetY = characterY + deltaY;\n\n    \/\/ Hedef d\u00f6\u015femenin koordinatlar\u0131 (pikselden d\u00f6\u015feme birimine d\u00f6n\u00fc\u015ft\u00fcrme)\n    const tileWidth = layer.tileset.tileWidth;\n    const tileHeight = layer.tileset.tileHeight;\n\n    const targetTileCol = Math.floor(targetX \/ tileWidth);\n    const targetTileRow = Math.floor(targetY \/ tileHeight);\n\n    \/\/ Harita s\u0131n\u0131rlar\u0131 d\u0131\u015f\u0131na \u00e7\u0131k\u0131l\u0131yorsa \u00e7arp\u0131\u015fma olarak kabul et\n    if (targetTileCol < 0 || targetTileCol >= layer.mapWidth ||\n        targetTileRow < 0 || targetTileRow >= layer.mapHeight) {\n        return true; \/\/ S\u0131n\u0131r d\u0131\u015f\u0131\n    }\n\n    \/\/ Hedef d\u00f6\u015femenin indeksini al\n    const tileIndex = layer.getTile(targetTileCol, targetTileRow);\n\n    \/\/ E\u011fer tileIndex ge\u00e7erliyse ve \u00e7arp\u0131\u015fma \u00f6zelliklerini kontrol et\n    if (tileIndex !== -1 && tileCollisionProperties[tileIndex] === 1) {\n        console.log(<code>\u00c7arp\u0131\u015fma alg\u0131land\u0131! D\u00f6\u015feme indeksi: ${tileIndex}<\/code>);\n        return true; \/\/ Kat\u0131 bir d\u00f6\u015feme ile \u00e7arp\u0131\u015fma\n    }\n    \n    return false; \/\/ \u00c7arp\u0131\u015fma yok\n}\n\n\/\/ \u00d6rnek kullan\u0131m\nconst player = { x: 100, y: 100, speed: 5 };\nconst desiredMoveX = player.speed; \/\/ Sa\u011fa hareket\nconst desiredMoveY = 0;\n\n\/\/ Zemin katman\u0131n\u0131 al\nconst groundLayer = Pixalo.SceneManager.getLayer(\"ground_layer\");\n\nif (groundLayer) {\n    if (!checkCollision(player.x, player.y, desiredMoveX, desiredMoveY, groundLayer)) {\n        player.x += desiredMoveX; \/\/ \u00c7arp\u0131\u015fma yoksa karakteri hareket ettir\n        console.log(<code>Karakter yeni konum: (${player.x}, ${player.y})<\/code>);\n    } else {\n        console.log(\"Hareket engellendi.\");\n    }\n}\n\n<\/pre>\n<p><\/code><\/p>\n<p>Bu kod \u00f6rne\u011finde, <code>checkCollision<\/code> fonksiyonu, bir karakterin belirli bir y\u00f6ne hareket etmeye \u00e7al\u0131\u015ft\u0131\u011f\u0131nda hedef d\u00f6\u015femenin kat\u0131 olup olmad\u0131\u011f\u0131n\u0131 kontrol eder. <code>layer.getTile(col, row)<\/code> metodu, Pixalo Engine'in <code>TilemapLayer<\/code> s\u0131n\u0131f\u0131n\u0131n bir par\u00e7as\u0131d\u0131r ve belirtilen d\u00f6\u015feme koordinatlar\u0131ndaki d\u00f6\u015feme indeksini d\u00f6nd\u00fcr\u00fcr. Bu indeks, <code>tileCollisionProperties<\/code> dizisi ile kar\u015f\u0131la\u015ft\u0131r\u0131larak d\u00f6\u015femenin kat\u0131 olup olmad\u0131\u011f\u0131 belirlenir. Bu, karakterin harita \u00fczerindeki hareketini k\u0131s\u0131tlaman\u0131n basit ama etkili bir yoludur.<\/p>\n<aside class=\"tip\">\n  Uzman \u0130pucu: Daha karma\u015f\u0131k oyunlarda, her d\u00f6\u015feme i\u00e7in birden fazla \u00f6zellik tan\u0131mlayabilirsiniz. \u00d6rne\u011fin, <code>Tile<\/code> objelerine do\u011frudan is_solid, is_water, on_enter_script gibi \u00f6zellikler ekleyerek dinamik etkile\u015fimler olu\u015fturabilirsiniz. Pixalo Engine'in <code>Tile<\/code> objelerini geni\u015fletme yetene\u011fi, bu t\u00fcr \u00f6zelle\u015ftirmeler i\u00e7in harika bir esneklik sunar.<br \/>\n<\/aside>\n<p>\u00c7arp\u0131\u015fma alg\u0131lamas\u0131n\u0131 sadece kat\u0131 objelerle s\u0131n\u0131rlamak zorunda de\u011filsiniz. Ayn\u0131 mant\u0131\u011f\u0131 kullanarak, karakter bir \"su\" d\u00f6\u015femesine girdi\u011finde h\u0131z\u0131n\u0131 azaltabilir, bir \"tuzak\" d\u00f6\u015femesinde can kaybedebilir veya \"etkile\u015fimli\" bir d\u00f6\u015femede (\u00f6rne\u011fin bir kap\u0131) bir tu\u015fa bas\u0131ld\u0131\u011f\u0131nda kap\u0131n\u0131n a\u00e7\u0131lmas\u0131n\u0131 sa\u011flayabilirsiniz. Bu t\u00fcr etkile\u015fimler, oyun d\u00fcnyan\u0131za derinlik katar ve oyuncu i\u00e7in daha ilgi \u00e7ekici deneyimler yarat\u0131r. Pixalo Engine ile tilemap'ler \u00fczerinde \u00e7arp\u0131\u015fma ve etkile\u015fim mekaniklerini uygulamak, oyununuzun temel oynan\u0131\u015f\u0131n\u0131 sa\u011flam bir zemin \u00fczerine oturtur.<\/p>\n<h2>\u0130leri D\u00fczey Tilemap Teknikleri ve Optimizasyon \u0130pu\u00e7lar\u0131<\/h2>\n<p>Temel tilemap olu\u015fturma, render etme ve \u00e7arp\u0131\u015fma alg\u0131lama mekanizmalar\u0131n\u0131 \u00f6\u011frendikten sonra, oyunlar\u0131n\u0131z\u0131 bir \u00fcst seviyeye ta\u015f\u0131yacak ileri d\u00fczey tekniklere ve optimizasyon ipu\u00e7lar\u0131na ge\u00e7ebiliriz. Pixalo Engine, bu t\u00fcr geli\u015fmi\u015f \u00f6zellikleri desteklemek i\u00e7in g\u00fc\u00e7l\u00fc bir altyap\u0131 sunar.<\/p>\n<h3>Parallax Scrolling (Paralaks Kayd\u0131rma)<\/h3>\n<p>Parallax scrolling, 2D oyunlarda derinlik hissi yaratmak i\u00e7in kullan\u0131lan pop\u00fcler bir tekniktir. Farkl\u0131 katmanlar\u0131n (arka plan, orta plan, \u00f6n plan) farkl\u0131 h\u0131zlarda kayd\u0131r\u0131lmas\u0131yla elde edilir. Kameraya daha yak\u0131n olan katmanlar daha h\u0131zl\u0131, daha uzak olanlar ise daha yava\u015f hareket eder. Pixalo Engine'de bunu uygulamak i\u00e7in birden fazla <code>TilemapLayer<\/code> kullan\u0131r\u0131z ve her bir katman\u0131 kameran\u0131n hareketine g\u00f6re farkl\u0131 bir oranla kayd\u0131r\u0131r\u0131z:<\/p>\n<pre><code>\n\/\/ Kamera konumunu baz alarak katmanlar\u0131 render eden fonksiyon\nfunction renderParallaxLayers(camera) {\n    const backgroundLayer = Pixalo.SceneManager.getLayer(\"background_layer\");\n    const middlegroundLayer = Pixalo.SceneManager.getLayer(\"middleground_layer\");\n    const foregroundLayer = Pixalo.SceneManager.getLayer(\"foreground_layer\");\n\n    \/\/ Arka plan katman\u0131 (en yava\u015f hareket eder)\n    if (backgroundLayer) {\n        backgroundLayer.render(camera, 0.2); \/\/ Kamera hareketinin %20'si\n    }\n\n    \/\/ Orta plan katman\u0131 (orta h\u0131zda hareket eder)\n    if (middlegroundLayer) {\n        middlegroundLayer.render(camera, 0.5); \/\/ Kamera hareketinin %50'si\n    }\n\n    \/\/ \u00d6n plan katman\u0131 (en h\u0131zl\u0131 hareket eder - genellikle kamerayla ayn\u0131 h\u0131zda veya biraz daha h\u0131zl\u0131)\n    if (foregroundLayer) {\n        foregroundLayer.render(camera, 1.0); \/\/ Kamera ile ayn\u0131 h\u0131z\n    }\n}\n\/\/ gameLoop i\u00e7inde renderParallaxLayers(Pixalo.Camera); \u00e7a\u011f\u0131r\u0131n.\n\n<\/pre>\n<p><\/code><\/p>\n<p>Burada, <code>render<\/code> metoduna eklenen ikinci parametre, katman\u0131n ne kadar h\u0131zl\u0131 kayd\u0131r\u0131laca\u011f\u0131n\u0131 kontrol eden bir parallax fakt\u00f6r\u00fcd\u00fcr. Pixalo Engine'in <code>TilemapLayer.render()<\/code> metodunun bu fakt\u00f6r\u00fc destekledi\u011fini varsay\u0131yoruz. Bu teknik, oyun d\u00fcnyan\u0131za \u00fc\u00e7 boyutlu bir derinlik katarken, 2D kalmas\u0131n\u0131 sa\u011flar. Bir platformer oyununda, uzak da\u011flar ve bulutlar arka planda yava\u015f\u00e7a kayarken, oyuncunun y\u00fcr\u00fcd\u00fc\u011f\u00fc zemin daha h\u0131zl\u0131 hareket ederek ger\u00e7ek\u00e7ilik hissini art\u0131r\u0131r.<\/p>\n<h3>Canl\u0131 ve Dinamik D\u00f6\u015femeler (Animated Tiles)<\/h3>\n<p>Sabit d\u00f6\u015femeler g\u00fczeldir, ancak animasyonlu d\u00f6\u015femeler (akan su, yanan me\u015faleler, titre\u015fen kristaller) oyun d\u00fcnyan\u0131za hayat katar. Pixalo Engine, tileset'lerinizdeki birden fazla kareyi kullanarak d\u00f6\u015femelerinizi canland\u0131rman\u0131za olanak tan\u0131r. Bu, genellikle tileset'teki biti\u015fik d\u00f6\u015feme indekslerini bir animasyon \u00e7er\u00e7evesi dizisi olarak tan\u0131mlayarak yap\u0131l\u0131r:<\/p>\n<pre><code>\n\/\/ \u00d6rnek bir animasyon tan\u0131m\u0131\nconst waterAnimation = new Pixalo.Animation([\n    { tileIndex: 10, duration: 150 }, \/\/ Tileset'teki 10. d\u00f6\u015feme, 150ms\n    { tileIndex: 11, duration: 150 }, \/\/ Tileset'teki 11. d\u00f6\u015feme, 150ms\n    { tileIndex: 12, duration: 150 }, \/\/ Tileset'teki 12. d\u00f6\u015feme, 150ms\n]);\n\n\/\/ Tilemap katman\u0131ndaki belirli bir d\u00f6\u015femeyi animasyonlu hale getir\nconst groundLayer = Pixalo.SceneManager.getLayer(\"ground_layer\");\nif (groundLayer) {\n    \/\/ \u00d6rne\u011fin (5, 5) konumundaki d\u00f6\u015femeyi animasyonlu su d\u00f6\u015femesi yap\n    groundLayer.setAnimatedTile(5, 5, waterAnimation);\n}\n\/\/ Pixalo Engine, render d\u00f6ng\u00fcs\u00fcnde bu animasyonlar\u0131 otomatik olarak g\u00fcncelleyip \u00e7izecektir.\n\n<\/pre>\n<p><\/code><\/p>\n<p><code>Pixalo.Animation<\/code> s\u0131n\u0131f\u0131, bir d\u00f6\u015feme animasyonunun hangi d\u00f6\u015feme indekslerini ve hangi s\u00fcrelerle kullanaca\u011f\u0131n\u0131 belirtir. <code>groundLayer.setAnimatedTile()<\/code> metodu ise harita \u00fczerindeki belirli bir d\u00f6\u015femeyi bu animasyonla de\u011fi\u015ftirir. Bu, oyununuzda etkile\u015fimli ve dinamik ortamlar yaratman\u0131z\u0131 sa\u011flar.<\/p>\n<h3>Performans Optimizasyonu \u0130pu\u00e7lar\u0131<\/h3>\n<p>B\u00fcy\u00fck tilemap'ler ve karma\u015f\u0131k efektler, performans sorunlar\u0131na yol a\u00e7abilir. \u0130\u015fte Pixalo Engine ile tilemap'lerinizi optimize etmek i\u00e7in baz\u0131 ipu\u00e7lar\u0131:<\/p>\n<ul>\n<li><strong>Batch Rendering (Toplu \u00c7izim):<\/strong> Pixalo Engine, dahili olarak d\u00f6\u015femeleri toplu olarak \u00e7izecek \u015fekilde tasarlanm\u0131\u015ft\u0131r. Bu, GPU'ya g\u00f6nderilen \u00e7izim \u00e7a\u011fr\u0131s\u0131 say\u0131s\u0131n\u0131 azaltarak performans\u0131 art\u0131r\u0131r. Ancak, farkl\u0131 tileset'ler veya farkl\u0131 materyaller kullanan katmanlar aras\u0131nda ge\u00e7i\u015f yapmak bu toplu \u00e7izimi bozabilir. M\u00fcmk\u00fcn oldu\u011funca ayn\u0131 tileset'i payla\u015fan ve benzer render \u00f6zelliklerine sahip d\u00f6\u015femeleri ayn\u0131 katmanda tutmaya \u00e7al\u0131\u015f\u0131n.<\/li>\n<li><strong>Frustum Culling (G\u00f6r\u00fc\u015f Alan\u0131 K\u0131rpma):<\/strong> Sadece kameran\u0131n g\u00f6r\u00fc\u015f alan\u0131nda olan d\u00f6\u015femeleri render etti\u011finizden emin olun. Pixalo Engine'in <code>TilemapLayer.render()<\/code> metodu genellikle bu optimizasyonu otomatik olarak yapar. Ancak manuel render yap\u0131yorsan\u0131z, kendi culling mant\u0131\u011f\u0131n\u0131z\u0131 uygulaman\u0131z gerekebilir.<\/li>\n<li><strong>Statik ve Dinamik Katmanlar:<\/strong> S\u0131k s\u0131k de\u011fi\u015fmeyen (zemin, duvarlar) ve \u00e7al\u0131\u015fma zaman\u0131nda s\u0131k\u00e7a de\u011fi\u015fen (patlayan d\u00f6\u015femeler, dinamik su) d\u00f6\u015femeler i\u00e7in ayr\u0131 katmanlar kullan\u0131n. Pixalo, statik katmanlar\u0131 daha verimli bir \u015fekilde optimize edebilir, belki de bunlar\u0131 tek bir b\u00fcy\u00fck doku olarak \u00f6nbelle\u011fe alabilir.<\/li>\n<li><strong>Quadtree veya Spatial Hashing:<\/strong> \u00c7ok b\u00fcy\u00fck haritalarda \u00e7arp\u0131\u015fma alg\u0131lamas\u0131 i\u00e7in, karakterin sadece yak\u0131n \u00e7evresindeki d\u00f6\u015femeleri kontrol etmek amac\u0131yla Quadtree veya Spatial Hashing gibi mekansal veri yap\u0131lar\u0131n\u0131 kullan\u0131n. Bu, her karede t\u00fcm haritay\u0131 tarama ihtiyac\u0131n\u0131 ortadan kald\u0131r\u0131r.<\/li>\n<\/ul>\n<aside class=\"tip\">\n  Uzman \u0130pucu: Bellek kullan\u0131m\u0131n\u0131 optimize etmek i\u00e7in, \u00f6zellikle mobil cihazlarda, tileset'lerinizin \u00e7\u00f6z\u00fcn\u00fcrl\u00fc\u011f\u00fcn\u00fc makul seviyelerde tutun. Ayr\u0131ca, Pixalo Engine'in kaynak y\u00f6neticisinin kullan\u0131lmayan dokular\u0131 bellekten atma \u00f6zelli\u011fini kullan\u0131n.<br \/>\n<\/aside>\n<p>Bu ileri d\u00fczey teknikler ve optimizasyon ipu\u00e7lar\u0131, Pixalo Engine ile sadece i\u015flevsel de\u011fil, ayn\u0131 zamanda g\u00f6rsel olarak etkileyici ve performansl\u0131 tilemap tabanl\u0131 oyunlar geli\u015ftirmenize yard\u0131mc\u0131 olacakt\u0131r. Karma\u015f\u0131k seviyeler tasarlarken bile, bu y\u00f6ntemler sayesinde oyununuz ak\u0131c\u0131 kalacak ve oyuncular\u0131n\u0131za keyifli bir deneyim sunacakt\u0131r.<\/p>\n<h2>Sonu\u00e7 ve S\u0131k\u00e7a Sorulan Sorular<\/h2>\n<p>Bu kapsaml\u0131 rehber boyunca, Pixalo Engine kullanarak 2D oyunlar\u0131n\u0131z i\u00e7in tilemap (d\u00f6\u015feme haritas\u0131) olu\u015fturman\u0131n t\u00fcm temel ve ileri d\u00fczey ad\u0131mlar\u0131n\u0131 inceledik. Ba\u015flang\u0131\u00e7ta neden tilemap kullanmam\u0131z gerekti\u011fini anlamaktan, tileset haz\u0131rlama, \u00e7ok katmanl\u0131 haritalar olu\u015fturma, bunlar\u0131 sahneye render etme ve etkile\u015fimli \u00e7arp\u0131\u015fma mekanikleri eklemeye kadar bir\u00e7ok konuya de\u011findik. Ayr\u0131ca, oyun d\u00fcnyan\u0131za derinlik katacak parallax scrolling, animasyonlu d\u00f6\u015femeler gibi ileri d\u00fczey teknikleri ve performans optimizasyonu i\u00e7in kritik ipu\u00e7lar\u0131n\u0131 da ele ald\u0131k. Pixalo Engine'in esnek yap\u0131s\u0131 sayesinde, hem basit prototipler hem de karma\u015f\u0131k, g\u00f6rsel a\u00e7\u0131dan zengin 2D oyunlar geli\u015ftirmek i\u00e7in tilemap'leri etkili bir \u015fekilde kullanabilece\u011finizi g\u00f6rd\u00fck.<\/p>\n<p>Tilemap'ler, sadece seviye tasar\u0131m\u0131n\u0131 h\u0131zland\u0131rmakla kalmaz, ayn\u0131 zamanda oyununuzun performans\u0131n\u0131 art\u0131r\u0131r ve bellek kullan\u0131m\u0131n\u0131 optimize eder. Bu da \u00f6zellikle mobil platformlar ve daha b\u00fcy\u00fck oyun d\u00fcnyalar\u0131 i\u00e7in hayati \u00f6nem ta\u015f\u0131r. Pixalo Engine ile edindi\u011finiz bu bilgiler \u0131\u015f\u0131\u011f\u0131nda, kendi yarat\u0131c\u0131 2D d\u00fcnyalar\u0131n\u0131z\u0131 in\u015fa etmek i\u00e7in ihtiyac\u0131n\u0131z olan ara\u00e7lara ve tekniklere sahipsiniz. \u015eimdi s\u0131ra sizde; Pixalo Engine'i a\u00e7\u0131n ve hayalinizdeki oyun d\u00fcnyas\u0131n\u0131 d\u00f6\u015feme d\u00f6\u015feme in\u015fa etmeye ba\u015flay\u0131n!<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<p>Pixalo Engine ile tilemap geli\u015ftirirken s\u0131k\u00e7a kar\u015f\u0131la\u015f\u0131lan sorular ve yan\u0131tlar\u0131:<\/p>\n<dl>\n<dt><strong>1. Pixalo Engine'de d\u0131\u015far\u0131dan olu\u015fturulmu\u015f Tiled Map Editor dosyalar\u0131n\u0131 (JSON\/XML) nas\u0131l y\u00fckleyebilirim?<\/strong><\/dt>\n<dd>\n<p>Pixalo Engine, Tiled Map Editor taraf\u0131ndan d\u0131\u015fa aktar\u0131lan JSON veya XML format\u0131ndaki harita verilerini ayr\u0131\u015ft\u0131rmak i\u00e7in dahili yard\u0131mc\u0131 fonksiyonlara sahip olabilir. Genellikle, bu dosyalar\u0131 bir HTTP iste\u011fi (<code>fetch<\/code> veya <code>XMLHttpRequest<\/code>) ile y\u00fckler, ard\u0131ndan JSON verisini ayr\u0131\u015ft\u0131r\u0131r ve bu veriyi kullanarak <code>Pixalo.TilemapLayer<\/code> nesnelerinizi olu\u015fturursunuz. Pixalo'nun varl\u0131k y\u00f6neticisi, bu t\u00fcr dosyalar\u0131 \u00f6zel bir y\u00fckleyici ile otomatik olarak i\u015flemenize de olanak tan\u0131yabilir.<\/p>\n<pre><code>\n\/\/ \u00d6rnek JSON dosyas\u0131ndan harita y\u00fckleme (basit\u00e7e)\nasync function loadTiledMap(filePath) {\n    const response = await fetch(filePath);\n    const mapData = await response.json();\n\n    const tileset = Pixalo.AssetManager.get(\"my_tiled_tileset\"); \/\/ Tiled map'e uygun tileset\n    const layerData = mapData.layers[0].data; \/\/ \u0130lk katman\u0131n verisi (tek boyutlu array olabilir)\n\n    \/\/ Tiled Map verisini Pixalo'nun 2D dizi format\u0131na d\u00f6n\u00fc\u015ft\u00fcr\n    let pixaloMapData = [];\n    for (let y = 0; y < mapData.height; y++) {\n        pixaloMapData[y] = [];\n        for (let x = 0; x < mapData.width; x++) {\n            \/\/ Tiled'da 1-tabanl\u0131 indeksleme varken, \u00e7o\u011fu motorda 0-tabanl\u0131d\u0131r.\n            \/\/ Ayr\u0131ca, Tiled'daki bo\u015f d\u00f6\u015femeler genellikle 0 ile temsil edilir.\n            pixaloMapData[y][x] = layerData[y * mapData.width + x] - 1; \n        }\n    }\n    return new Pixalo.TilemapLayer(tileset, pixaloMapData, mapData.width, mapData.height);\n}\n\/\/ loadTiledMap(\"assets\/my_map.json\").then(layer => Pixalo.SceneManager.addLayer(\"tiled_layer\", layer));\n        <\/pre>\n<p><\/code>\n    <\/dd>\n<dt><strong>2. Animasyonlu d\u00f6\u015femelerin performans\u0131 nas\u0131l etkilenir?<\/strong><\/dt>\n<dd>\n<p>Animasyonlu d\u00f6\u015femeler, her karede g\u00fcncellenmeleri gerekti\u011fi i\u00e7in statik d\u00f6\u015femelere g\u00f6re daha fazla i\u015flemci (CPU) ve bazen de grafik i\u015flemci (GPU) kayna\u011f\u0131 t\u00fcketir. Ancak, Pixalo Engine genellikle bu g\u00fcncellemeleri optimize edilmi\u015f bir \u015fekilde yapar. \u00c7ok fazla say\u0131da farkl\u0131 animasyonlu d\u00f6\u015femeniz varsa, performans d\u00fc\u015f\u00fc\u015f\u00fc ya\u015fanabilir. Bu durumda, animasyon karelerini m\u00fcmk\u00fcn oldu\u011funca tek bir tileset'te birle\u015ftirmek ve sadece g\u00f6r\u00fcnen animasyonlar\u0131 g\u00fcncellemek gibi optimizasyonlar d\u00fc\u015f\u00fcnebilirsiniz.<\/p>\n<\/dd>\n<dt><strong>3. Bir tilemap'teki tek bir d\u00f6\u015femenin g\u00f6rselini \u00e7al\u0131\u015fma zaman\u0131nda dinamik olarak de\u011fi\u015ftirebilir miyim?<\/strong><\/dt>\n<dd>\n<p>Evet, Pixalo Engine'in <code>TilemapLayer<\/code> s\u0131n\u0131f\u0131 genellikle <code>setTile(col, row, newTileIndex)<\/code> gibi metodlar sunar. Bu metodlar sayesinde, belirli bir koordinattaki d\u00f6\u015femenin indeksini de\u011fi\u015ftirerek g\u00f6rselini an\u0131nda g\u00fcncelleyebilirsiniz. Bu \u00f6zellik, oyun i\u00e7inde patlayan duvarlar, a\u00e7\u0131l\u0131p kapanan kap\u0131lar veya de\u011fi\u015fen zemin dokular\u0131 gibi dinamik ortam etkile\u015fimleri olu\u015fturmak i\u00e7in \u00e7ok kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<pre><code>\n\/\/ Belirli bir d\u00f6\u015femeyi de\u011fi\u015ftirme \u00f6rne\u011fi\nconst groundLayer = Pixalo.SceneManager.getLayer(\"ground_layer\");\nif (groundLayer) {\n    \/\/ \u00d6rne\u011fin (10, 8) konumundaki d\u00f6\u015femeyi tileset'teki 5 numaral\u0131 d\u00f6\u015feme ile de\u011fi\u015ftir\n    groundLayer.setTile(10, 8, 5); \n    console.log(\"D\u00f6\u015feme (10,8) ba\u015far\u0131yla de\u011fi\u015ftirildi.\");\n}\n        <\/pre>\n<p><\/code>\n    <\/dd>\n<dt><strong>4. Tilemap'ler i\u00e7in farkl\u0131 \u00e7\u00f6z\u00fcn\u00fcrl\u00fcklerde varl\u0131klar kullanabilir miyim?<\/strong><\/dt>\n<dd>\n<p>Evet, Pixalo Engine'de farkl\u0131 \u00e7\u00f6z\u00fcn\u00fcrl\u00fcklerde tileset'ler kullanabilirsiniz, ancak genellikle her bir <code>TilemapLayer<\/code> tek bir tileset ile ili\u015fkilendirilir. E\u011fer bir katmanda hem 16x16 hem de 32x32 piksel d\u00f6\u015femeler kullanmak istiyorsan\u0131z, bunlar\u0131 ayr\u0131 tileset'ler olarak y\u00fckleyip, ayr\u0131 katmanlarda render etmeniz veya her iki boyutu da i\u00e7eren tek bir b\u00fcy\u00fck tileset olu\u015fturup (farkl\u0131 boyutlar aras\u0131 bo\u015fluk b\u0131rakarak) d\u00f6\u015feme indekslemesini buna g\u00f6re ayarlaman\u0131z gerekir. Performans i\u00e7in, genellikle t\u00fcm d\u00f6\u015femeleri ayn\u0131 boyutta ve tek bir tileset'te tutmak tercih edilir.<\/p>\n<\/dd>\n<\/dl>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"2D oyun geli\u015ftirmede seviye tasar\u0131m\u0131, oyunun ak\u0131c\u0131l\u0131\u011f\u0131 ve oyuncu deneyimi i\u00e7in kritik \u00f6neme sahiptir. Peki, b\u00fcy\u00fck ve karma\u015f\u0131k&hellip;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-32184","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Pixalo Engine ile Tilemap Olu\u015fturma Rehberi: Ad\u0131m Ad\u0131m<\/title>\n<meta name=\"description\" content=\"2D oyun geli\u015ftirmede seviye tasar\u0131m\u0131, oyunun ak\u0131c\u0131l\u0131\u011f\u0131 ve oyuncu deneyimi i\u00e7in kritik \u00f6neme sahiptir. Peki, b\u00fcy\u00fck ve karma\u015f\u0131k oyun d\u00fcnyalar\u0131n\u0131 verimli bir \u015fekilde nas\u0131l olu\u015fturabiliriz? Bu rehberde, Pixalo Engine kullanarak g\u00fc\u00e7l\u00fc ve esnek tilemap&#039;ler (d\u00f6\u015feme haritalar\u0131) olu\u015fturman\u0131n inceliklerini ad\u0131m ad\u0131m ke\u015ffedece\u011fiz. Performans odakl\u0131 ipu\u00e7lar\u0131ndan mobil uyumlulu\u011fa kadar, ba\u015ftan sona eksiksiz bir seviye tasar\u0131m s\u00fcrecine haz\u0131r olun.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/pixalo-engine-ile-tilemap-olusturma-rehberi-adim-adim\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Pixalo Engine ile Tilemap Olu\u015fturma Rehberi: Ad\u0131m Ad\u0131m\" \/>\n<meta property=\"og:description\" content=\"2D oyun geli\u015ftirmede seviye tasar\u0131m\u0131, oyunun ak\u0131c\u0131l\u0131\u011f\u0131 ve oyuncu deneyimi i\u00e7in kritik \u00f6neme sahiptir. Peki, b\u00fcy\u00fck ve karma\u015f\u0131k oyun d\u00fcnyalar\u0131n\u0131 verimli bir \u015fekilde nas\u0131l olu\u015fturabiliriz? Bu rehberde, Pixalo Engine kullanarak g\u00fc\u00e7l\u00fc ve esnek tilemap&#039;ler (d\u00f6\u015feme haritalar\u0131) olu\u015fturman\u0131n inceliklerini ad\u0131m ad\u0131m ke\u015ffedece\u011fiz. Performans odakl\u0131 ipu\u00e7lar\u0131ndan mobil uyumlulu\u011fa kadar, ba\u015ftan sona eksiksiz bir seviye tasar\u0131m s\u00fcrecine haz\u0131r olun.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/pixalo-engine-ile-tilemap-olusturma-rehberi-adim-adim\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-18T16:01:40+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"29 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/pixalo-engine-ile-tilemap-olusturma-rehberi-adim-adim\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/pixalo-engine-ile-tilemap-olusturma-rehberi-adim-adim\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Pixalo Engine ile Tilemap Olu\u015fturma Rehberi: Ad\u0131m Ad\u0131m\",\"datePublished\":\"2025-10-18T16:01:40+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/pixalo-engine-ile-tilemap-olusturma-rehberi-adim-adim\/\"},\"wordCount\":4873,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/pixalo-engine-ile-tilemap-olusturma-rehberi-adim-adim\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/pixalo-engine-ile-tilemap-olusturma-rehberi-adim-adim\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/pixalo-engine-ile-tilemap-olusturma-rehberi-adim-adim\/\",\"name\":\"Pixalo Engine ile Tilemap Olu\u015fturma Rehberi: Ad\u0131m Ad\u0131m\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-18T16:01:40+00:00\",\"description\":\"2D oyun geli\u015ftirmede seviye tasar\u0131m\u0131, oyunun ak\u0131c\u0131l\u0131\u011f\u0131 ve oyuncu deneyimi i\u00e7in kritik \u00f6neme sahiptir. Peki, b\u00fcy\u00fck ve karma\u015f\u0131k oyun d\u00fcnyalar\u0131n\u0131 verimli bir \u015fekilde nas\u0131l olu\u015fturabiliriz? Bu rehberde, Pixalo Engine kullanarak g\u00fc\u00e7l\u00fc ve esnek tilemap'ler (d\u00f6\u015feme haritalar\u0131) olu\u015fturman\u0131n inceliklerini ad\u0131m ad\u0131m ke\u015ffedece\u011fiz. Performans odakl\u0131 ipu\u00e7lar\u0131ndan mobil uyumlulu\u011fa kadar, ba\u015ftan sona eksiksiz bir seviye tasar\u0131m s\u00fcrecine haz\u0131r olun.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/pixalo-engine-ile-tilemap-olusturma-rehberi-adim-adim\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/pixalo-engine-ile-tilemap-olusturma-rehberi-adim-adim\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/pixalo-engine-ile-tilemap-olusturma-rehberi-adim-adim\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Pixalo Engine ile Tilemap Olu\u015fturma Rehberi: Ad\u0131m Ad\u0131m\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Pixalo Engine ile Tilemap Olu\u015fturma Rehberi: Ad\u0131m Ad\u0131m","description":"2D oyun geli\u015ftirmede seviye tasar\u0131m\u0131, oyunun ak\u0131c\u0131l\u0131\u011f\u0131 ve oyuncu deneyimi i\u00e7in kritik \u00f6neme sahiptir. Peki, b\u00fcy\u00fck ve karma\u015f\u0131k oyun d\u00fcnyalar\u0131n\u0131 verimli bir \u015fekilde nas\u0131l olu\u015fturabiliriz? Bu rehberde, Pixalo Engine kullanarak g\u00fc\u00e7l\u00fc ve esnek tilemap'ler (d\u00f6\u015feme haritalar\u0131) olu\u015fturman\u0131n inceliklerini ad\u0131m ad\u0131m ke\u015ffedece\u011fiz. Performans odakl\u0131 ipu\u00e7lar\u0131ndan mobil uyumlulu\u011fa kadar, ba\u015ftan sona eksiksiz bir seviye tasar\u0131m s\u00fcrecine haz\u0131r olun.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/pixalo-engine-ile-tilemap-olusturma-rehberi-adim-adim\/","og_locale":"tr_TR","og_type":"article","og_title":"Pixalo Engine ile Tilemap Olu\u015fturma Rehberi: Ad\u0131m Ad\u0131m","og_description":"2D oyun geli\u015ftirmede seviye tasar\u0131m\u0131, oyunun ak\u0131c\u0131l\u0131\u011f\u0131 ve oyuncu deneyimi i\u00e7in kritik \u00f6neme sahiptir. Peki, b\u00fcy\u00fck ve karma\u015f\u0131k oyun d\u00fcnyalar\u0131n\u0131 verimli bir \u015fekilde nas\u0131l olu\u015fturabiliriz? Bu rehberde, Pixalo Engine kullanarak g\u00fc\u00e7l\u00fc ve esnek tilemap'ler (d\u00f6\u015feme haritalar\u0131) olu\u015fturman\u0131n inceliklerini ad\u0131m ad\u0131m ke\u015ffedece\u011fiz. Performans odakl\u0131 ipu\u00e7lar\u0131ndan mobil uyumlulu\u011fa kadar, ba\u015ftan sona eksiksiz bir seviye tasar\u0131m s\u00fcrecine haz\u0131r olun.","og_url":"https:\/\/fatihsoysal.com\/blog\/pixalo-engine-ile-tilemap-olusturma-rehberi-adim-adim\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-18T16:01:40+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"29 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/pixalo-engine-ile-tilemap-olusturma-rehberi-adim-adim\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/pixalo-engine-ile-tilemap-olusturma-rehberi-adim-adim\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Pixalo Engine ile Tilemap Olu\u015fturma Rehberi: Ad\u0131m Ad\u0131m","datePublished":"2025-10-18T16:01:40+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/pixalo-engine-ile-tilemap-olusturma-rehberi-adim-adim\/"},"wordCount":4873,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/pixalo-engine-ile-tilemap-olusturma-rehberi-adim-adim\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/pixalo-engine-ile-tilemap-olusturma-rehberi-adim-adim\/","url":"https:\/\/fatihsoysal.com\/blog\/pixalo-engine-ile-tilemap-olusturma-rehberi-adim-adim\/","name":"Pixalo Engine ile Tilemap Olu\u015fturma Rehberi: Ad\u0131m Ad\u0131m","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-18T16:01:40+00:00","description":"2D oyun geli\u015ftirmede seviye tasar\u0131m\u0131, oyunun ak\u0131c\u0131l\u0131\u011f\u0131 ve oyuncu deneyimi i\u00e7in kritik \u00f6neme sahiptir. Peki, b\u00fcy\u00fck ve karma\u015f\u0131k oyun d\u00fcnyalar\u0131n\u0131 verimli bir \u015fekilde nas\u0131l olu\u015fturabiliriz? Bu rehberde, Pixalo Engine kullanarak g\u00fc\u00e7l\u00fc ve esnek tilemap'ler (d\u00f6\u015feme haritalar\u0131) olu\u015fturman\u0131n inceliklerini ad\u0131m ad\u0131m ke\u015ffedece\u011fiz. Performans odakl\u0131 ipu\u00e7lar\u0131ndan mobil uyumlulu\u011fa kadar, ba\u015ftan sona eksiksiz bir seviye tasar\u0131m s\u00fcrecine haz\u0131r olun.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/pixalo-engine-ile-tilemap-olusturma-rehberi-adim-adim\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/pixalo-engine-ile-tilemap-olusturma-rehberi-adim-adim\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/pixalo-engine-ile-tilemap-olusturma-rehberi-adim-adim\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Pixalo Engine ile Tilemap Olu\u015fturma Rehberi: Ad\u0131m Ad\u0131m"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32184","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=32184"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32184\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=32184"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=32184"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=32184"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}