{"id":36893,"date":"2025-12-24T15:30:42","date_gmt":"2025-12-24T12:30:42","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/arcade-kutuphanesi-ile-2d-oyunlara-baslangic-bolum-14-fizik-motorunu-kullanmak\/"},"modified":"2025-12-24T15:30:42","modified_gmt":"2025-12-24T12:30:42","slug":"arcade-kutuphanesi-ile-2d-oyunlara-baslangic-bolum-14-fizik-motorunu-kullanmak","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/arcade-kutuphanesi-ile-2d-oyunlara-baslangic-bolum-14-fizik-motorunu-kullanmak\/","title":{"rendered":"Arcade K\u00fct\u00fcphanesi ile 2D Oyunlara Ba\u015flang\u0131\u00e7 (B\u00f6l\u00fcm 14): Fizik Motorunu Kullanmak"},"content":{"rendered":"<h2>Arcade K\u00fct\u00fcphanesi ile 2D Oyunlara Ba\u015flang\u0131\u00e7 (B\u00f6l\u00fcm 14): Fizik Motorunu Kullanmak<\/h2>\n<p>2D oyun geli\u015ftirme serimizin bu on d\u00f6rd\u00fcnc\u00fc b\u00f6l\u00fcm\u00fcnde, Arcade k\u00fct\u00fcphanesinin sundu\u011fu en g\u00fc\u00e7l\u00fc \u00f6zelliklerden birine, yani fizik motoruna odaklan\u0131yoruz. Oyunlar\u0131n\u0131zda ger\u00e7ek\u00e7i hareket, \u00e7arp\u0131\u015fma tespiti ve etkile\u015fimler yaratmak, oyunculara daha s\u00fcr\u00fckleyici bir deneyim sunman\u0131n anahtar\u0131d\u0131r. Arcade&#8217;in entegre fizik motoru, bu karma\u015f\u0131k s\u00fcre\u00e7leri basitle\u015ftirerek geli\u015ftiricilerin oyun mant\u0131\u011f\u0131na odaklanmas\u0131na olanak tan\u0131r. Bu makalede, Arcade fizik motorunun temel prensiplerini, nas\u0131l kurulaca\u011f\u0131n\u0131, kullan\u0131laca\u011f\u0131n\u0131 ve oyunlar\u0131n\u0131za nas\u0131l dinamizm kataca\u011f\u0131n\u0131z\u0131 detayl\u0131 bir \u015fekilde inceleyece\u011fiz.<\/p>\n<h2>Arcade&#8217;deki Fizik Motoruna Genel Bak\u0131\u015f<\/h2>\n<p>Bir oyunun &#8220;canl\u0131&#8221; hissetmesini sa\u011flayan en \u00f6nemli unsurlardan biri, nesnelerin ger\u00e7ek d\u00fcnyadaki gibi hareket etmesi ve birbirleriyle etkile\u015fime girmesidir. Arcade k\u00fct\u00fcphanesi, bu ihtiyac\u0131 kar\u015f\u0131lamak \u00fczere tasarlanm\u0131\u015f g\u00fc\u00e7l\u00fc ve kullan\u0131m\u0131 kolay bir fizik motoru entegrasyonuna sahiptir. Bu motor, \u00f6zellikle 2D platformer ve top tabanl\u0131 oyunlar i\u00e7in geli\u015ftirilmi\u015ftir ve yer\u00e7ekimi, h\u0131z, ivme ve \u00e7arp\u0131\u015fma tespiti gibi temel fiziksel olaylar\u0131 sim\u00fcle etmenize olanak tan\u0131r.<\/p>\n<h3>Fizik Motorunun Temelleri<\/h3>\n<p>Arcade&#8217;in fizik motoru, oyun d\u00fcnyas\u0131ndaki her bir <code>Sprite<\/code> nesnesinin konumunu, h\u0131z\u0131n\u0131 ve ivmesini y\u00f6netir. Bu motor sayesinde, sprite&#8217;lar\u0131n\u0131z yer\u00e7ekimine tabi olabilir, duvarlara \u00e7arpabilir, platformlar \u00fczerinde durabilir veya di\u011fer sprite&#8217;larla etkile\u015fime ge\u00e7ebilir. Geli\u015ftirici olarak sizin yapman\u0131z gereken, fizik motorunu ba\u015flatmak, yer\u00e7ekimi gibi temel parametreleri ayarlamak ve hangi sprite&#8217;lar\u0131n fizik kurallar\u0131na tabi olaca\u011f\u0131n\u0131 belirtmektir.<\/p>\n<h3>SpriteList ve Fizik<\/h3>\n<p>Arcade&#8217;de fizik motoru genellikle <code>SpriteList<\/code> nesneleriyle birlikte \u00e7al\u0131\u015f\u0131r. Bir <code>SpriteList<\/code>&#8216;i &#8220;duvar&#8221; veya &#8220;platform&#8221; olarak tan\u0131mlad\u0131\u011f\u0131n\u0131zda, fizik motoru bu listedeki t\u00fcm sprite&#8217;lar\u0131 \u00e7arp\u0131\u015fma i\u00e7in dikkate al\u0131r. Benzer \u015fekilde, hareket eden bir &#8220;oyuncu&#8221; veya &#8220;mermi&#8221; sprite&#8217;\u0131n\u0131 da fizik motoruna ba\u011flayarak onun hareketini ve etkile\u015fimlerini y\u00f6netebilirsiniz. Bu yap\u0131, oyun d\u00fcnyan\u0131z\u0131 mod\u00fcler ve y\u00f6netilebilir tutman\u0131za yard\u0131mc\u0131 olur.<\/p>\n<h3>Avantajlar\u0131<\/h3>\n<ul>\n<li><b>Basit Entegrasyon:<\/b> Arcade&#8217;in kendi i\u00e7inde gelmesi sayesinde ek bir k\u00fct\u00fcphane kurman\u0131za gerek kalmaz.<\/li>\n<li><b>H\u0131zl\u0131 Geli\u015ftirme:<\/b> Karma\u015f\u0131k fizik hesaplamalar\u0131n\u0131 sizin yerinize yaparak geli\u015ftirme s\u00fcrecini h\u0131zland\u0131r\u0131r.<\/li>\n<li><b>Ger\u00e7ek\u00e7i Etkile\u015fimler:<\/b> Yer\u00e7ekimi, \u00e7arp\u0131\u015fma ve s\u00fcrt\u00fcnme gibi temel fiziksel olaylar\u0131 kolayca sim\u00fcle etmenizi sa\u011flar.<\/li>\n<li><b>Platformer Odakl\u0131:<\/b> \u00d6zellikle platformer t\u00fcr\u00fc oyunlar i\u00e7in optimize edilmi\u015f \u00f6zel bir motor sunar.<\/li>\n<\/ul>\n<h2>Fizik Motorunu Ba\u015flatma ve Yap\u0131land\u0131rma<\/h2>\n<p>Arcade oyununuzda fizik motorunu kullanmaya ba\u015flamak olduk\u00e7a basittir. \u0130lk ad\u0131m, uygun fizik motoru s\u0131n\u0131f\u0131n\u0131 se\u00e7mek ve onu oyun pencerenizin <code>setup()<\/code> metodunda veya benzer bir ba\u015flang\u0131\u00e7 noktas\u0131nda ba\u015flatmakt\u0131r. Arcade, iki ana fizik motoru s\u0131n\u0131f\u0131 sunar: <code>arcade.PhysicsEngineSimple<\/code> ve <code>arcade.PhysicsEnginePlatformer<\/code>.<\/p>\n<h3><code>arcade.PhysicsEngineSimple<\/code> ve <code>arcade.PhysicsEnginePlatformer<\/code><\/h3>\n<p><b><code>arcade.PhysicsEngineSimple<\/code>:<\/b> Bu, daha genel ama\u00e7l\u0131 bir fizik motorudur. Bir sprite&#8217;\u0131n belirli bir <code>SpriteList<\/code>&#8216;teki di\u011fer sprite&#8217;larla \u00e7arp\u0131\u015fmas\u0131n\u0131 ve bu \u00e7arp\u0131\u015fmalar\u0131n sonucunda nas\u0131l hareket edece\u011fini y\u00f6netmek i\u00e7in kullan\u0131l\u0131r. \u00d6rne\u011fin, bir merminin bir d\u00fc\u015fmana \u00e7arp\u0131p yok olmas\u0131 veya bir topun duvarlardan sekmesi gibi durumlar i\u00e7in idealdir.<\/p>\n<pre><code class=\"language-python\">\nimport arcade\n\n# ... (oyun penceresi ve sprite'lar tan\u0131mland\u0131) ...\n\nclass MyGame(arcade.Window):\n    def __init__(self):\n        super().__init__(800, 600, \"Basit Fizik Motoru \u00d6rne\u011fi\")\n        self.player_sprite = None\n        self.wall_list = None\n        self.physics_engine = None\n\n    def setup(self):\n        self.player_sprite = arcade.Sprite(\":resources:images\/animated_characters\/female_adventurer\/femaleAdventurer_idle.png\", 0.5)\n        self.player_sprite.center_x = 50\n        self.player_sprite.center_y = 50\n\n        self.wall_list = arcade.SpriteList()\n        # Duvar ekle\n        wall = arcade.Sprite(\":resources:images\/tiles\/stoneMid.png\", 0.5)\n        wall.center_x = 400\n        wall.center_y = 300\n        self.wall_list.append(wall)\n\n        # Fizik motorunu ba\u015flat (oyuncu ve duvarlar aras\u0131nda)\n        self.physics_engine = arcade.PhysicsEngineSimple(self.player_sprite, self.wall_list)\n\n    def on_update(self, delta_time):\n        self.physics_engine.update()\n        # Oyuncunun hareketini burada g\u00fcncelleyebilirsiniz (\u00f6rn. klavye ile)\n        # self.player_sprite.update()\n\n    # ... (draw metodu) ...\n<\/pre>\n<p><\/code><\/p>\n<p><b><code>arcade.PhysicsEnginePlatformer<\/code>:<\/b> Ad\u0131ndan da anla\u015f\u0131laca\u011f\u0131 gibi, platformer oyunlar\u0131 i\u00e7in \u00f6zel olarak tasarlanm\u0131\u015ft\u0131r. Yer\u00e7ekimi, z\u0131plama, merdiven t\u0131rmanma gibi platformer mekaniklerini kolayca uygulaman\u0131za olanak tan\u0131r. Bu motor, bir oyuncu sprite'\u0131, yer\u00e7ekimi ve platformlar\u0131 temsil eden bir <code>SpriteList<\/code> ile ba\u015flat\u0131l\u0131r.<\/p>\n<h3>Yer\u00e7ekimi (Gravity) Ayarlar\u0131<\/h3>\n<p>Yer\u00e7ekimi, fizik motorunun temel bir bile\u015fenidir ve nesnelerin dikey y\u00f6nde nas\u0131l etkilenece\u011fini belirler. <code>PhysicsEnginePlatformer<\/code> kullan\u0131rken, yer\u00e7ekimi de\u011ferini motoru ba\u015flat\u0131rken belirtebilirsiniz. Genellikle negatif bir de\u011fer, nesnelerin a\u015fa\u011f\u0131 do\u011fru d\u00fc\u015fmesini sa\u011flar.<\/p>\n<pre><code class=\"language-python\">\n# Yer\u00e7ekimi ile PhysicsEnginePlatformer ba\u015flatma\nGRAVITY = (0, -980) # X ekseninde yer\u00e7ekimi yok, Y ekseninde -980 piksel\/saniye^2\nself.physics_engine = arcade.PhysicsEnginePlatformer(\n    self.player_sprite, self.wall_list, gravity_constant=GRAVITY[1]\n)\n<\/pre>\n<p><\/code><\/p>\n<h3>Duvarlar ve Platformlar (Duvardan Ge\u00e7meyen Objeler)<\/h3>\n<p>Fizik motorunun \u00e7al\u0131\u015fmas\u0131 i\u00e7in, \u00e7arp\u0131\u015fma alg\u0131lamas\u0131 yapaca\u011f\u0131 statik (hareket etmeyen) nesneleri tan\u0131mlaman\u0131z gerekir. Bu nesneler genellikle \"duvarlar\", \"zemin\" veya \"platformlar\" olarak adland\u0131r\u0131l\u0131r ve bir <code>SpriteList<\/code> i\u00e7inde tutulur. Fizik motoru, hareket eden sprite'\u0131n\u0131z\u0131n bu listedeki objelerle \u00e7arp\u0131\u015fmas\u0131n\u0131 otomatik olarak y\u00f6netir.<\/p>\n<pre><code class=\"language-python\">\n# ... (setup metodunda) ...\nself.wall_list = arcade.SpriteList()\n\n# Zemin olu\u015fturma\nfor x in range(0, 1000, 64): # 64 piksel geni\u015fli\u011finde d\u00f6\u015femeler\n    wall = arcade.Sprite(\":resources:images\/tiles\/grassMid.png\", 0.5)\n    wall.center_x = x\n    wall.center_y = 32 # Ekran\u0131n alt\u0131\n    self.wall_list.append(wall)\n\n# Platform olu\u015fturma\nplatform = arcade.Sprite(\":resources:images\/tiles\/stoneMid.png\", 0.5)\nplatform.center_x = 250\nplatform.center_y = 150\nself.wall_list.append(platform)\n<\/pre>\n<p><\/code><\/p>\n<h3>\u00d6rnek Kod: Basit Bir Fizik Ortam\u0131<\/h3>\n<p>A\u015fa\u011f\u0131daki kod, basit bir zemin ve platform \u00fczerinde yer\u00e7ekimine tabi olan bir oyuncu sprite'\u0131n\u0131 g\u00f6sterir. Oyuncu, platforma \u00e7arpt\u0131\u011f\u0131nda durur ve d\u00fc\u015fmez.<\/p>\n<pre><code class=\"language-python\">\nimport arcade\n\nSPRITE_SCALING = 0.5\nSCREEN_WIDTH = 800\nSCREEN_HEIGHT = 600\nSCREEN_TITLE = \"Basit Fizik Ortam\u0131\"\n\nPLAYER_MOVEMENT_SPEED = 5\nGRAVITY = 0.5\nPLAYER_JUMP_SPEED = 15\n\nclass MyGame(arcade.Window):\n    def __init__(self):\n        super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_TITLE)\n        arcade.set_background_color(arcade.csscolor.CORNFLOWER_BLUE)\n\n        self.player_list = None\n        self.wall_list = None\n        self.player_sprite = None\n        self.physics_engine = None\n\n    def setup(self):\n        self.player_list = arcade.SpriteList()\n        self.wall_list = arcade.SpriteList()\n\n        # Oyuncu sprite'\u0131\n        self.player_sprite = arcade.Sprite(\":resources:images\/animated_characters\/female_adventurer\/femaleAdventurer_idle.png\", SPRITE_SCALING)\n        self.player_sprite.center_x = 64\n        self.player_sprite.center_y = 128\n        self.player_list.append(self.player_sprite)\n\n        # Zemin olu\u015fturma\n        for x in range(0, SCREEN_WIDTH + 64, 64):\n            wall = arcade.Sprite(\":resources:images\/tiles\/grassMid.png\", SPRITE_SCALING)\n            wall.center_x = x\n            wall.center_y = 32\n            self.wall_list.append(wall)\n\n        # Birka\u00e7 platform olu\u015fturma\n        platform = arcade.Sprite(\":resources:images\/tiles\/stoneMid.png\", SPRITE_SCALING)\n        platform.center_x = 200\n        platform.center_y = 150\n        self.wall_list.append(platform)\n\n        platform = arcade.Sprite(\":resources:images\/tiles\/stoneMid.png\", SPRITE_SCALING)\n        platform.center_x = 400\n        platform.center_y = 250\n        self.wall_list.append(platform)\n\n        # Fizik motorunu ba\u015flat\n        self.physics_engine = arcade.PhysicsEnginePlatformer(\n            self.player_sprite, self.wall_list, gravity_constant=GRAVITY\n        )\n\n    def on_draw(self):\n        arcade.start_render()\n        self.wall_list.draw()\n        self.player_list.draw()\n\n    def on_update(self, delta_time):\n        self.physics_engine.update()\n\n    def on_key_press(self, key, modifiers):\n        if key == arcade.key.UP or key == arcade.key.W:\n            if self.physics_engine.can_jump():\n                self.player_sprite.change_y = PLAYER_JUMP_SPEED\n        elif key == arcade.key.LEFT or key == arcade.key.A:\n            self.player_sprite.change_x = -PLAYER_MOVEMENT_SPEED\n        elif key == arcade.key.RIGHT or key == arcade.key.D:\n            self.player_sprite.change_x = PLAYER_MOVEMENT_SPEED\n\n    def on_key_release(self, key, modifiers):\n        if key == arcade.key.LEFT or key == arcade.key.A:\n            self.player_sprite.change_x = 0\n        elif key == arcade.key.RIGHT or key == arcade.key.D:\n            self.player_sprite.change_x = 0\n\ndef main():\n    window = MyGame()\n    window.setup()\n    arcade.run()\n\nif __name__ == \"__main__\":\n    main()\n<\/pre>\n<p><\/code><\/p>\n<h2>Hareket ve Etkile\u015fim<\/h2>\n<p>Fizik motoru, sprite'lar\u0131n hareketini ve birbirleriyle olan etkile\u015fimlerini y\u00f6netmek i\u00e7in bir dizi mekanizma sunar. Bu mekanizmalar sayesinde, oyununuzdaki nesneler daha dinamik ve ger\u00e7ek\u00e7i bir \u015fekilde tepki verebilir.<\/p>\n<h3>H\u0131z ve \u0130vme Kontrol\u00fc<\/h3>\n<p>Arcade'deki her <code>Sprite<\/code> nesnesinin <code>change_x<\/code> ve <code>change_y<\/code> \u00f6zellikleri vard\u0131r. Bunlar, sprite'\u0131n her g\u00fcncelleme d\u00f6ng\u00fcs\u00fcnde X ve Y eksenlerindeki h\u0131z\u0131n\u0131 (piksel\/saniye) temsil eder. Fizik motoru, bu h\u0131z de\u011ferlerini yer\u00e7ekimi ve \u00e7arp\u0131\u015fmalar gibi fakt\u00f6rlere g\u00f6re otomatik olarak ayarlar. \u00d6rne\u011fin, bir oyuncu z\u0131plad\u0131\u011f\u0131nda <code>change_y<\/code> pozitif bir de\u011fere ayarlan\u0131r, yer\u00e7ekimi devreye girer ve bu de\u011feri zamanla azaltarak oyuncunun tekrar yere d\u00fc\u015fmesini sa\u011flar.<\/p>\n<h3>\u00c7arp\u0131\u015fma Tespiti ve Tepkileri<\/h3>\n<p>Fizik motorunun en \u00f6nemli i\u015flevlerinden biri \u00e7arp\u0131\u015fma tespitidir. Motor, hareket eden sprite'\u0131n\u0131z\u0131n (\u00f6rne\u011fin oyuncu) tan\u0131mlanm\u0131\u015f \"duvar\" veya \"platform\" sprite listesindeki herhangi bir nesneyle \u00e7arp\u0131\u015f\u0131p \u00e7arp\u0131\u015fmad\u0131\u011f\u0131n\u0131 s\u00fcrekli olarak kontrol eder. Bir \u00e7arp\u0131\u015fma alg\u0131land\u0131\u011f\u0131nda, motor otomatik olarak sprite'\u0131n konumunu ayarlar, b\u00f6ylece sprite duvar\u0131n i\u00e7inden ge\u00e7mez. Bu sayede, geli\u015ftiricinin manuel \u00e7arp\u0131\u015fma kontrol\u00fc yazmas\u0131na gerek kalmaz.<\/p>\n<p>Ek olarak, <code>arcade.check_for_collision_with_list()<\/code> gibi fonksiyonlar\u0131 kullanarak iki farkl\u0131 <code>SpriteList<\/code> aras\u0131ndaki \u00e7arp\u0131\u015fmalar\u0131 manuel olarak kontrol edebilir ve bu \u00e7arp\u0131\u015fmalara \u00f6zel tepkiler (\u00f6rne\u011fin, mermi d\u00fc\u015fmana \u00e7arpt\u0131\u011f\u0131nda puan kazanma) tan\u0131mlayabilirsiniz. Fizik motoru genellikle hareket eden bir ana sprite'\u0131n (oyuncu) statik objelerle \u00e7arp\u0131\u015fmas\u0131n\u0131 y\u00f6netirken, di\u011fer dinamik \u00e7arp\u0131\u015fmalar i\u00e7in bu manuel kontrol faydal\u0131 olabilir.<\/p>\n<h3>S\u00fcrt\u00fcnme ve S\u0131\u00e7rama (Opsiyonel)<\/h3>\n<p>Baz\u0131 geli\u015fmi\u015f fizik motorlar\u0131 s\u00fcrt\u00fcnme ve s\u0131\u00e7rama gibi \u00f6zellikler sunar. Arcade'in temel fizik motorlar\u0131 bu \u00f6zelliklere do\u011frudan sahip olmasa da, <code>on_update<\/code> metodunda sprite'\u0131n h\u0131z\u0131n\u0131 manuel olarak azaltarak veya \u00e7arp\u0131\u015fma an\u0131nda <code>change_y<\/code> de\u011ferini tersine \u00e7evirerek benzer etkileri sim\u00fcle edebilirsiniz. \u00d6rne\u011fin, bir topun yere \u00e7arpt\u0131\u011f\u0131nda s\u0131\u00e7ramas\u0131 i\u00e7in <code>change_y = -change_y * SICHRAMA_KATSAYISI<\/code> gibi bir kod kullanabilirsiniz.<\/p>\n<h2>Platformer Oyunlar\u0131 i\u00e7in Fizik<\/h2>\n<p>Arcade'in <code>PhysicsEnginePlatformer<\/code> s\u0131n\u0131f\u0131, \u00f6zellikle platformer t\u00fcr\u00fc oyunlar i\u00e7in tasarlanm\u0131\u015ft\u0131r ve bu t\u00fcr oyunlarda s\u0131k\u00e7a kar\u015f\u0131la\u015f\u0131lan mekanikleri kolayca uygulaman\u0131z\u0131 sa\u011flar.<\/p>\n<h3>Oyuncu Kontrol\u00fc ve Z\u0131plama<\/h3>\n<p><code>PhysicsEnginePlatformer<\/code>, oyuncunun yatay hareketini (sol\/sa\u011f) ve z\u0131plamas\u0131n\u0131 y\u00f6netmek i\u00e7in idealdir. Oyuncunun <code>change_x<\/code> ve <code>change_y<\/code> de\u011ferlerini klavye giri\u015flerine g\u00f6re ayarlayarak hareketini kontrol edersiniz. Z\u0131plama i\u00e7in, motorun <code>can_jump()<\/code> metodunu kullanarak oyuncunun yerde olup olmad\u0131\u011f\u0131n\u0131 kontrol edebilir ve ard\u0131ndan <code>change_y<\/code> de\u011ferini z\u0131plama h\u0131z\u0131na ayarlayabilirsiniz.<\/p>\n<pre><code class=\"language-python\">\n# ... (on_key_press metodunda) ...\nif key == arcade.key.UP or key == arcade.key.W:\n    if self.physics_engine.can_jump(): # Oyuncu yerdeyse z\u0131playabilir\n        self.player_sprite.change_y = PLAYER_JUMP_SPEED\n<\/pre>\n<p><\/code><\/p>\n<h3>Merdivenler ve Kaygan Y\u00fczeyler<\/h3>\n<p><code>PhysicsEnginePlatformer<\/code>, merdivenleri de destekler. Merdivenleri temsil eden bir <code>SpriteList<\/code> olu\u015fturup motoru ba\u015flat\u0131rken bu listeyi de belirtebilirsiniz. Oyuncu merdiven sprite'\u0131 \u00fczerindeyken yukar\u0131\/a\u015fa\u011f\u0131 tu\u015flar\u0131na bas\u0131ld\u0131\u011f\u0131nda, motor oyuncunun t\u0131rmanmas\u0131n\u0131 veya inmesini sa\u011flar. Kaygan y\u00fczeyler gibi daha karma\u015f\u0131k etkile\u015fimler i\u00e7in, y\u00fczeyin t\u00fcr\u00fcne g\u00f6re oyuncunun s\u00fcrt\u00fcnmesini veya hareket h\u0131z\u0131n\u0131 manuel olarak ayarlaman\u0131z gerekebilir.<\/p>\n<pre><code class=\"language-python\">\n# PhysicsEnginePlatformer ba\u015flat\u0131rken merdiven listesi ekleme\nself.ladder_list = arcade.SpriteList()\n# ... merdiven sprite'lar\u0131n\u0131 ladder_list'e ekle ...\nself.physics_engine = arcade.PhysicsEnginePlatformer(\n    self.player_sprite, self.wall_list, gravity_constant=GRAVITY, ladders=self.ladder_list\n)\n<\/pre>\n<p><\/code><\/p>\n<h3><code>PhysicsEnginePlatformer<\/code> Detaylar\u0131<\/h3>\n<p>Bu motor, yer\u00e7ekimi uygulamak, platformlara \u00e7arpmak, z\u0131plamak ve merdiven t\u0131rmanmak gibi temel platformer davran\u0131\u015flar\u0131n\u0131 otomatik olarak i\u015fler. Ayr\u0131ca, oyuncunun yerde olup olmad\u0131\u011f\u0131n\u0131 kontrol etmek i\u00e7in <code>can_jump()<\/code> gibi kullan\u0131\u015fl\u0131 metotlar sunar. Motorun <code>update()<\/code> metodu her \u00e7a\u011fr\u0131ld\u0131\u011f\u0131nda, sprite'\u0131n konumu, h\u0131z\u0131 ve di\u011fer fiziksel \u00f6zellikleri g\u00fcncellenir.<\/p>\n<h3>\u00d6rnek Kod: Temel Platformer Mekani\u011fi<\/h3>\n<p>Yukar\u0131daki \"Basit Bir Fizik Ortam\u0131\" \u00f6rne\u011fi, zaten temel platformer mekaniklerini (yer\u00e7ekimi, platformlar, z\u0131plama) g\u00f6stermektedir. Bu kodu temel alarak daha karma\u015f\u0131k seviyeler, d\u00fc\u015fmanlar ve etkile\u015fimler ekleyebilirsiniz.<\/p>\n<h2>Geli\u015fmi\u015f Fizik Konular\u0131 ve \u0130pu\u00e7lar\u0131<\/h2>\n<p>Arcade'in fizik motoru \u00e7o\u011fu 2D oyun i\u00e7in yeterli olsa da, baz\u0131 senaryolarda daha geli\u015fmi\u015f yakla\u015f\u0131mlara ihtiya\u00e7 duyulabilir.<\/p>\n<h3>Birden Fazla Fizik Motoru Kullan\u0131m\u0131<\/h3>\n<p>Oyununuzda farkl\u0131 t\u00fcrde fiziksel etkile\u015fimler gerektiren birden fazla oyuncu veya nesne grubu varsa, birden fazla fizik motoru \u00f6rne\u011fi olu\u015fturabilirsiniz. \u00d6rne\u011fin, bir oyuncu i\u00e7in <code>PhysicsEnginePlatformer<\/code> ve mermilerle d\u00fc\u015fmanlar aras\u0131ndaki etkile\u015fimler i\u00e7in ayr\u0131 bir <code>PhysicsEngineSimple<\/code> kullanabilirsiniz. Her bir motorun <code>update()<\/code> metodunu <code>on_update<\/code> d\u00f6ng\u00fcs\u00fcnde \u00e7a\u011f\u0131rmay\u0131 unutmay\u0131n.<\/p>\n<h3>Performans \u0130pu\u00e7lar\u0131<\/h3>\n<ul>\n<li><b>Sprite Say\u0131s\u0131n\u0131 Y\u00f6netin:<\/b> Fizik motoru, her g\u00fcncellemede t\u00fcm ilgili sprite'lar\u0131 kontrol eder. Ekrandaki sprite say\u0131s\u0131 artt\u0131k\u00e7a performans d\u00fc\u015febilir. G\u00f6r\u00fcnmeyen sprite'lar\u0131 fizik motorundan \u00e7\u0131karmay\u0131 veya pasif hale getirmeyi d\u00fc\u015f\u00fcn\u00fcn.<\/li>\n<li><b>Basit \u00c7arp\u0131\u015fma Kutular\u0131:<\/b> Sprite'lar\u0131n \u00e7arp\u0131\u015fma kutular\u0131n\u0131 (hit box) m\u00fcmk\u00fcn oldu\u011funca basit tutun (\u00f6rne\u011fin, dikd\u00f6rtgen veya kare). Karma\u015f\u0131k \u00e7arp\u0131\u015fma \u015fekilleri daha fazla hesaplama gerektirir.<\/li>\n<li><b>Gereksiz Fizik Hesaplamalar\u0131ndan Ka\u00e7\u0131n\u0131n:<\/b> Statik dekorasyonlar gibi fiziksel etkile\u015fime girmesi gerekmeyen sprite'lar\u0131 fizik motoruna dahil etmeyin.<\/li>\n<\/ul>\n<h3>Hata Ay\u0131klama (Debugging)<\/h3>\n<p>Fiziksel etkile\u015fimlerde sorun ya\u015fad\u0131\u011f\u0131n\u0131zda, sprite'lar\u0131n \u00e7arp\u0131\u015fma kutular\u0131n\u0131 g\u00f6r\u00fcn\u00fcr hale getirmek hata ay\u0131klamay\u0131 kolayla\u015ft\u0131rabilir. Arcade, sprite'lar\u0131n etraf\u0131na \u00e7arp\u0131\u015fma kutular\u0131n\u0131 \u00e7izen bir \u00f6zellik sunar:<\/p>\n<pre><code class=\"language-python\">\n# on_draw metodunda\n# self.player_sprite.draw_hit_box(arcade.color.RED, line_width=2)\n# self.wall_list.draw_hit_boxes(arcade.color.GREEN, line_width=1)\n<\/pre>\n<p><\/code><\/p>\n<p>Bu, sprite'lar\u0131n\u0131z\u0131n ger\u00e7ekten nerede \u00e7arp\u0131\u015ft\u0131\u011f\u0131n\u0131 g\u00f6rsel olarak anlaman\u0131za yard\u0131mc\u0131 olur.<\/p>\n<h2>Fizik Motorunun S\u0131n\u0131rlamalar\u0131 ve Alternatifler<\/h2>\n<p>Arcade'in yerle\u015fik fizik motoru bir\u00e7ok 2D oyun i\u00e7in harika bir ba\u015flang\u0131\u00e7 noktas\u0131 olsa da, baz\u0131 durumlarda yetersiz kalabilir.<\/p>\n<h3>Ne Zaman Yeterli De\u011fil?<\/h3>\n<ul>\n<li><b>Ger\u00e7ek\u00e7i K\u00fctle ve Kuvvet Hesaplamalar\u0131:<\/b> Arcade'in motoru daha \u00e7ok konum ve h\u0131z tabanl\u0131d\u0131r. Ger\u00e7ek\u00e7i k\u00fctle, kuvvet uygulama, tork veya esneklik gibi ileri d\u00fczey fiziksel \u00f6zellikler i\u00e7in uygun de\u011fildir.<\/li>\n<li><b>Karma\u015f\u0131k \u015eekilli \u00c7arp\u0131\u015fmalar:<\/b> Pixel-perfect veya \u00e7ok karma\u015f\u0131k \u00e7okgen \u00e7arp\u0131\u015fma tespiti gerektiren durumlar i\u00e7in s\u0131n\u0131rl\u0131 kalabilir.<\/li>\n<li><b>Eklemeli Cisimler (Ragdoll Physics):<\/b> Birden fazla par\u00e7adan olu\u015fan ve eklemlerle birbirine ba\u011fl\u0131 cisimlerin sim\u00fclasyonu i\u00e7in tasarlanmam\u0131\u015ft\u0131r.<\/li>\n<\/ul>\n<h3>PyMunk Entegrasyonu<\/h3>\n<p>E\u011fer oyununuz daha geli\u015fmi\u015f ve ger\u00e7ek\u00e7i fizik sim\u00fclasyonlar\u0131 gerektiriyorsa, Arcade k\u00fct\u00fcphanesi PyMunk gibi harici bir fizik motoruyla entegrasyon i\u00e7in destek sunar. PyMunk, Chipmunk fizik motorunun Python portudur ve k\u00fctle, s\u00fcrt\u00fcnme, esneklik, eklemler ve daha fazlas\u0131n\u0131 i\u00e7eren \u00e7ok daha kapsaml\u0131 bir fizik motorudur. Arcade'in <code>arcade.PymunkPhysicsEngine<\/code> s\u0131n\u0131f\u0131, PyMunk'u Arcade sprite'lar\u0131n\u0131zla birlikte kullanman\u0131za olanak tan\u0131r. Bu, daha karma\u015f\u0131k oyunlar i\u00e7in g\u00fc\u00e7l\u00fc bir se\u00e7enektir, ancak kurulumu ve kullan\u0131m\u0131 biraz daha karma\u015f\u0131kt\u0131r.<\/p>\n<h2>Sonu\u00e7<\/h2>\n<p>Arcade k\u00fct\u00fcphanesinin yerle\u015fik fizik motoru, 2D oyunlar\u0131n\u0131za hayat vermek i\u00e7in g\u00fc\u00e7l\u00fc ve eri\u015filebilir bir ara\u00e7t\u0131r. Yer\u00e7ekimi, \u00e7arp\u0131\u015fma tespiti ve platformer mekanikleri gibi temel fiziksel etkile\u015fimleri kolayca uygulaman\u0131z\u0131 sa\u011flar. Bu makalede \u00f6\u011frendi\u011finiz bilgilerle, oyunlar\u0131n\u0131zdaki karakterlerin ve nesnelerin daha dinamik ve ger\u00e7ek\u00e7i hareket etmesini sa\u011flayabilirsiniz. Basit top oyunlar\u0131ndan karma\u015f\u0131k platformerlara kadar bir\u00e7ok farkl\u0131 t\u00fcrdeki oyunda Arcade fizik motorunu kullanarak oyuncular\u0131n\u0131za daha s\u00fcr\u00fckleyici bir deneyim sunabilirsiniz. Unutmay\u0131n, pratik yapmak ve farkl\u0131 senaryolar\u0131 denemek, bu motorun t\u00fcm potansiyelini anlaman\u0131n en iyi yoludur. \u0130yi kodlamalar ve keyifli oyun geli\u015ftirmeler!<\/p>\n<h2>SSS (S\u0131k Sorulan Sorular)<\/h2>\n<h3>Arcade'in fizik motoru ne kadar ger\u00e7ek\u00e7i?<\/h3>\n<p>Arcade'in yerle\u015fik fizik motoru, 2D oyunlar i\u00e7in temel d\u00fczeyde ger\u00e7ek\u00e7ilik sunar. Yer\u00e7ekimi, temel \u00e7arp\u0131\u015fma tespiti ve platformer hareketleri gibi \u00f6zellikleri ba\u015far\u0131yla sim\u00fcle eder. Ancak, k\u00fctle, s\u00fcrt\u00fcnme katsay\u0131lar\u0131, tork veya esneklik gibi ileri d\u00fczey fiziksel \u00f6zellikler i\u00e7in tasarlanmam\u0131\u015ft\u0131r. Daha ger\u00e7ek\u00e7i ve karma\u015f\u0131k sim\u00fclasyonlar i\u00e7in PyMunk gibi harici bir k\u00fct\u00fcphane entegrasyonu \u00f6nerilir.<\/p>\n<h3>Karakterimin z\u0131plama y\u00fcksekli\u011fini nas\u0131l ayarlar\u0131m?<\/h3>\n<p>Karakterinizin z\u0131plama y\u00fcksekli\u011fini, z\u0131plama an\u0131nda <code>player_sprite.change_y<\/code> \u00f6zelli\u011fine atad\u0131\u011f\u0131n\u0131z de\u011ferle kontrol edersiniz. Daha y\u00fcksek bir de\u011fer, daha y\u00fcksek bir z\u0131plama demektir. Ayr\u0131ca, <code>PhysicsEnginePlatformer<\/code> ba\u015flat\u0131l\u0131rken verilen <code>gravity_constant<\/code> de\u011feri de z\u0131plaman\u0131n ne kadar h\u0131zl\u0131 d\u00fc\u015fece\u011fini etkiler. Daha k\u00fc\u00e7\u00fck (mutlak de\u011ferce) bir yer\u00e7ekimi sabiti, daha yava\u015f d\u00fc\u015f\u00fc\u015f ve dolay\u0131s\u0131yla daha \"y\u00fcksek\" hissettiren bir z\u0131plama anlam\u0131na gelir.<\/p>\n<h3>Farkl\u0131 sprite gruplar\u0131 aras\u0131nda \u00e7arp\u0131\u015fmay\u0131 nas\u0131l y\u00f6netirim?<\/h3>\n<p>Arcade'in fizik motorlar\u0131 (<code>PhysicsEngineSimple<\/code> ve <code>PhysicsEnginePlatformer<\/code>), genellikle bir ana sprite'\u0131n (\u00f6rne\u011fin oyuncu) bir veya daha fazla \"duvar\" listesiyle \u00e7arp\u0131\u015fmas\u0131n\u0131 y\u00f6netir. Di\u011fer sprite gruplar\u0131 (\u00f6rne\u011fin mermiler ve d\u00fc\u015fmanlar) aras\u0131ndaki \u00e7arp\u0131\u015fmalar\u0131 y\u00f6netmek i\u00e7in <code>arcade.check_for_collision_with_list()<\/code> veya <code>arcade.check_for_collision_with_lists()<\/code> fonksiyonlar\u0131n\u0131 kullanman\u0131z gerekir. Bu fonksiyonlar, \u00e7arp\u0131\u015fan sprite'lar\u0131 d\u00f6nd\u00fcr\u00fcr ve bu sayede oyun mant\u0131\u011f\u0131n\u0131za g\u00f6re tepkileri (\u00f6rne\u011fin, d\u00fc\u015fman\u0131 yok etme, puan ekleme) uygulayabilirsiniz.<\/p>\n<h3>Performans sorunlar\u0131 ya\u015farsam ne yapmal\u0131y\u0131m?<\/h3>\n<p>Performans sorunlar\u0131 genellikle ekrandaki veya fizik motoru taraf\u0131ndan y\u00f6netilen sprite say\u0131s\u0131n\u0131n \u00e7ok fazla olmas\u0131ndan kaynaklan\u0131r. \u015eunlar\u0131 deneyebilirsiniz:<\/p>\n<ul>\n<li>G\u00f6r\u00fcnmeyen veya etkile\u015fime girmesi gerekmeyen sprite'lar\u0131 fizik motorundan \u00e7\u0131kar\u0131n veya pasif hale getirin.<\/li>\n<li>Sprite'lar\u0131n \u00e7arp\u0131\u015fma kutular\u0131n\u0131 (hit box) m\u00fcmk\u00fcn oldu\u011funca basit tutun.<\/li>\n<li>Fizik motorunun <code>update()<\/code> metodunu her karede yaln\u0131zca bir kez \u00e7a\u011f\u0131rd\u0131\u011f\u0131n\u0131zdan emin olun.<\/li>\n<li>Oyun mant\u0131\u011f\u0131n\u0131zdaki gereksiz hesaplamalar\u0131 optimize edin.<\/li>\n<li>\u00c7ok say\u0131da dinamik nesne varsa, PyMunk gibi daha optimize edilmi\u015f bir fizik motorunu ara\u015ft\u0131rmay\u0131 d\u00fc\u015f\u00fcnebilirsiniz.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"2D oyun geli\u015ftirme serimizin bu on d\u00f6rd\u00fcnc\u00fc b\u00f6l\u00fcm\u00fcnde, Arcade k\u00fct\u00fcphanesinin sundu\u011fu en g\u00fc\u00e7l\u00fc \u00f6zelliklerden birine, yani fizik motoruna odaklan&#8230;","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-36893","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>Arcade K\u00fct\u00fcphanesi ile 2D Oyunlara Ba\u015flang\u0131\u00e7 (B\u00f6l\u00fcm 14): Fizik Motorunu Kullanmak - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\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\/arcade-kutuphanesi-ile-2d-oyunlara-baslangic-bolum-14-fizik-motorunu-kullanmak\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Arcade K\u00fct\u00fcphanesi ile 2D Oyunlara Ba\u015flang\u0131\u00e7 (B\u00f6l\u00fcm 14): Fizik Motorunu Kullanmak\" \/>\n<meta property=\"og:description\" content=\"2D oyun geli\u015ftirme serimizin bu on d\u00f6rd\u00fcnc\u00fc b\u00f6l\u00fcm\u00fcnde, Arcade k\u00fct\u00fcphanesinin sundu\u011fu en g\u00fc\u00e7l\u00fc \u00f6zelliklerden birine, yani fizik motoruna odaklan...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/arcade-kutuphanesi-ile-2d-oyunlara-baslangic-bolum-14-fizik-motorunu-kullanmak\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-12-24T12:30:42+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=\"15 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/arcade-kutuphanesi-ile-2d-oyunlara-baslangic-bolum-14-fizik-motorunu-kullanmak\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/arcade-kutuphanesi-ile-2d-oyunlara-baslangic-bolum-14-fizik-motorunu-kullanmak\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Arcade K\u00fct\u00fcphanesi ile 2D Oyunlara Ba\u015flang\u0131\u00e7 (B\u00f6l\u00fcm 14): Fizik Motorunu Kullanmak\",\"datePublished\":\"2025-12-24T12:30:42+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/arcade-kutuphanesi-ile-2d-oyunlara-baslangic-bolum-14-fizik-motorunu-kullanmak\/\"},\"wordCount\":2325,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/arcade-kutuphanesi-ile-2d-oyunlara-baslangic-bolum-14-fizik-motorunu-kullanmak\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/arcade-kutuphanesi-ile-2d-oyunlara-baslangic-bolum-14-fizik-motorunu-kullanmak\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/arcade-kutuphanesi-ile-2d-oyunlara-baslangic-bolum-14-fizik-motorunu-kullanmak\/\",\"name\":\"Arcade K\u00fct\u00fcphanesi ile 2D Oyunlara Ba\u015flang\u0131\u00e7 (B\u00f6l\u00fcm 14): Fizik Motorunu Kullanmak - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-12-24T12:30:42+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/arcade-kutuphanesi-ile-2d-oyunlara-baslangic-bolum-14-fizik-motorunu-kullanmak\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/arcade-kutuphanesi-ile-2d-oyunlara-baslangic-bolum-14-fizik-motorunu-kullanmak\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/arcade-kutuphanesi-ile-2d-oyunlara-baslangic-bolum-14-fizik-motorunu-kullanmak\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Arcade K\u00fct\u00fcphanesi ile 2D Oyunlara Ba\u015flang\u0131\u00e7 (B\u00f6l\u00fcm 14): Fizik Motorunu Kullanmak\"}]},{\"@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":"Arcade K\u00fct\u00fcphanesi ile 2D Oyunlara Ba\u015flang\u0131\u00e7 (B\u00f6l\u00fcm 14): Fizik Motorunu Kullanmak - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","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\/arcade-kutuphanesi-ile-2d-oyunlara-baslangic-bolum-14-fizik-motorunu-kullanmak\/","og_locale":"tr_TR","og_type":"article","og_title":"Arcade K\u00fct\u00fcphanesi ile 2D Oyunlara Ba\u015flang\u0131\u00e7 (B\u00f6l\u00fcm 14): Fizik Motorunu Kullanmak","og_description":"2D oyun geli\u015ftirme serimizin bu on d\u00f6rd\u00fcnc\u00fc b\u00f6l\u00fcm\u00fcnde, Arcade k\u00fct\u00fcphanesinin sundu\u011fu en g\u00fc\u00e7l\u00fc \u00f6zelliklerden birine, yani fizik motoruna odaklan...","og_url":"https:\/\/fatihsoysal.com\/blog\/arcade-kutuphanesi-ile-2d-oyunlara-baslangic-bolum-14-fizik-motorunu-kullanmak\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-12-24T12:30:42+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"15 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/arcade-kutuphanesi-ile-2d-oyunlara-baslangic-bolum-14-fizik-motorunu-kullanmak\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/arcade-kutuphanesi-ile-2d-oyunlara-baslangic-bolum-14-fizik-motorunu-kullanmak\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Arcade K\u00fct\u00fcphanesi ile 2D Oyunlara Ba\u015flang\u0131\u00e7 (B\u00f6l\u00fcm 14): Fizik Motorunu Kullanmak","datePublished":"2025-12-24T12:30:42+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/arcade-kutuphanesi-ile-2d-oyunlara-baslangic-bolum-14-fizik-motorunu-kullanmak\/"},"wordCount":2325,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/arcade-kutuphanesi-ile-2d-oyunlara-baslangic-bolum-14-fizik-motorunu-kullanmak\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/arcade-kutuphanesi-ile-2d-oyunlara-baslangic-bolum-14-fizik-motorunu-kullanmak\/","url":"https:\/\/fatihsoysal.com\/blog\/arcade-kutuphanesi-ile-2d-oyunlara-baslangic-bolum-14-fizik-motorunu-kullanmak\/","name":"Arcade K\u00fct\u00fcphanesi ile 2D Oyunlara Ba\u015flang\u0131\u00e7 (B\u00f6l\u00fcm 14): Fizik Motorunu Kullanmak - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-12-24T12:30:42+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/arcade-kutuphanesi-ile-2d-oyunlara-baslangic-bolum-14-fizik-motorunu-kullanmak\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/arcade-kutuphanesi-ile-2d-oyunlara-baslangic-bolum-14-fizik-motorunu-kullanmak\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/arcade-kutuphanesi-ile-2d-oyunlara-baslangic-bolum-14-fizik-motorunu-kullanmak\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Arcade K\u00fct\u00fcphanesi ile 2D Oyunlara Ba\u015flang\u0131\u00e7 (B\u00f6l\u00fcm 14): Fizik Motorunu Kullanmak"}]},{"@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\/36893","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=36893"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/36893\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=36893"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=36893"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=36893"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}