This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this manual in English
Defold’da girdinin genel olarak nasıl çalıştığını, girdinin nasıl alındığını ve betik dosyalarınızda hangi sırayla alındığını öğrenmeniz önerilir. Girdi sistemi hakkında daha fazla bilgi için Girdiye genel bakış kılavuzuna bakın.
Oyun kumandası (gamepad) tetikleyicileri, standart oyun kumandası girdisini oyun işlevlerine bağlamanızı sağlar. Oyun kumandası girdisi şu öğeler için girdi eşlemeleri (input binding) sunar:

Aşağıdaki örneklerde, yukarıdaki görüntüde gösterilen eylemler kullanılır. Tüm girdilerde olduğu gibi, girdi eylemlerinizi istediğiniz şekilde adlandırabilirsiniz.
Dijital düğmeler pressed, released ve repeated olayları üretir. Aşağıdaki örnek, bir dijital düğmenin girdisinin (basılma veya bırakılma) nasıl algılandığını gösterir:
function on_input(self, action_id, action)
if action_id == hash("gamepad_lpad_left") then
if action.pressed then
-- start moving left
elseif action.released then
-- stop moving left
end
end
end
Analog çubuklar (analog stick), oyun kumandası ayar dosyasında tanımlanan ölü bölgenin (dead zone) dışına hareket ettirildiğinde sürekli girdi olayları üretir (aşağıya bakın). Aşağıdaki örnek, bir analog çubuğun girdisinin nasıl algılandığını gösterir:
function on_input(self, action_id, action)
if action_id == hash("gamepad_lstick_down") then
-- left stick was moved down
print(action.value) -- a value between 0.0 an -1.0
end
end
Analog çubuklar, ana yönlerde belirli bir eşik değerinin ötesine hareket ettirildiğinde pressed ve released olayları da üretir. Böylece bir analog çubuğu dijital yön girdisi olarak da kullanmak kolaylaşır:
function on_input(self, action_id, action)
if action_id == hash("gamepad_lstick_down") and action.pressed then
-- left stick was moved to its extreme down position
end
end
Defold, üzerinde çalıştığı işletim sistemi aracılığıyla birden fazla oyun kumandasını destekler. Eylemler, action tablosunun gamepad alanını girdinin geldiği oyun kumandasının numarasına ayarlar:
function on_input(self, action_id, action)
if action_id == hash("gamepad_start") then
if action.gamepad == 0 then
-- gamepad 0 wants to join the game
end
end
end
Oyun kumandası girdi eşlemeleri, bir oyun kumandasının bağlandığını (başlangıçtan itibaren bağlı olanlar dahil) veya bağlantısının kesildiğini algılamak için Connected ve Disconnected adlı iki ayrı eşleme de sağlar.
function on_input(self, action_id, action)
if action_id == hash("gamepad_connected") then
if action.gamepad == 0 then
-- gamepad 0 was connected
end
elseif action_id == hash("gamepad_disconnected") then
if action.gamepad == 0 then
-- gamepad 0 was disconnected
end
end
end
Oyun kumandası girdi eşlemeleri, bağlı herhangi bir oyun kumandasının filtrelenmemiş (ölü bölge uygulanmamış) düğme, eksen ve yön anahtarı (hat) girdisini sağlamak için Raw adlı ayrı bir eşleme de sunar.
function on_input(self, action_id, action)
if action_id == hash("raw") then
pprint(action.gamepad_buttons)
pprint(action.gamepad_axis)
pprint(action.gamepad_hats)
end
end
Oyun kumandası eşlemeleri, bir kumandanın düğmelerini, eksenlerini ve yön anahtarlarını girdi eşlemelerinizin kullandığı standart denetimlere dönüştürür. Defold, game.project dosyasının Input bölümünde yapılandırılan iki eşleme kaynağını birleştirir:
| Ayar | Eşleme biçimi | Varsayılan |
|---|---|---|
| Gamepad Database | Kumandanın GUID değeriyle eşleştirilen SDL biçimli metin veritabanı | /builtins/input/gamecontrollerdb.txt |
| Gamepads | Cihaz adları ve platformlar için eski .gamepads girdileri |
/builtins/input/default.gamepads |
SDL veritabanı eşlemeleri ve otomatik platform eşlemeleri, Gamepad Deadzone ayarını kullanır. Eski .gamepads girdileri kendi ölü bölgelerini tanımlar. Android’de, veritabanı girdisi olmayan bir kumanda otomatik eşleme de alabilir.
Bir .gamepads dosyası birden çok kumanda için eşlemeler içerebilir. Mevcut eski eşlemeler desteklenmeye devam eder. Defold, varsayılan dosyada yaygın kumandalar için eşlemeler içerir:

Bir masaüstü platformunda eski biçimli bir .gamepads eşlemesi oluşturmanız gerekiyorsa aşağıdaki araç yardımcı olabilir. Android için Android’de oyun kumandaları bölümüne bakın.
gdc.zip dosyasını indirmek için tıklayın.
Windows, Linux ve macOS için ikili dosyalar içerir. Komut satırından çalıştırın:
./gdc
Araç, bağlı oyun kumandanızdaki farklı düğmelere basmanızı ister. Ardından kumandanız için doğru eşlemeleri içeren yeni bir gamepads dosyası oluşturur. Yeni dosyayı kaydedin veya mevcut gamepads dosyanızla birleştirin, ardından game.project dosyasındaki ayarı güncelleyin:

Ne yapılandırılmış bir eşleme ne de otomatik platform eşlemesi kullanılabiliyorsa oyun kumandası yalnızca Connected, Disconnected ve Raw öğelerine bağlanan eylemleri üretir. Bir kumanda eşlemesi ekleyebilir veya ham girdisini oyununuzda işleyebilirsiniz.
action içindeki gamepad_unknown değerini okuyarak bir oyun kumandası girdi eyleminin bilinmeyen bir oyun kumandasından gelip gelmediğini kontrol edebilirsiniz:
function on_input(self, action_id, action)
if action_id == hash("connected") then
if action.gamepad_unknown then
print("The connected gamepad is unidentified and will only generate raw input")
else
print("The connected gamepad is known and will generate input actions for buttons and sticks")
end
end
end
Oyun kumandaları HTML5 derlemelerinde desteklenir ve diğer platformlarla aynı girdi olaylarını üretir. Oyun kumandası desteği, çoğu tarayıcı tarafından desteklenen Gamepad API üzerine kuruludur (bu destek tablosuna bakın). Tarayıcı Gamepad API desteği sunmuyorsa Defold, projenizdeki tüm oyun kumandası tetikleyicilerini herhangi bir bildirim vermeden yok sayar. navigator nesnesinde getGamepads işlevinin bulunup bulunmadığını kontrol ederek tarayıcının Gamepad API desteği sunup sunmadığını öğrenebilirsiniz:
local function supports_gamepads()
return not html5 or (html5.run('typeof navigator.getGamepads === "function"') == "true")
end
if supports_gamepads() then
print("Platform supports gamepads")
end
Oyununuz bir iframe içinde çalışıyorsa, iframe öğesine gamepad izninin de eklendiğinden emin olmanız gerekir:
<iframe allow="gamepad"></iframe>
Bağlı bir oyun kumandası tarayıcı tarafından standart oyun kumandası olarak tanımlanırsa, oyun kumandası ayar dosyasındaki Standard Gamepad eşlemesini kullanır (/builtins içindeki default.gamepads dosyasında bir Standard Gamepad eşlemesi bulunur). Standart oyun kumandası, PlayStation veya Xbox oyun kumandasına benzer bir düğme düzeninde 16 düğme ve 2 analog çubuğa sahip kumanda olarak tanımlanır (daha fazla bilgi için W3C tanımına ve düğme düzenine bakın). Bağlı oyun kumandası standart oyun kumandası olarak tanımlanmazsa Defold, oyun kumandası ayar dosyasında donanımsal oyun kumandası türüne uyan bir eşleme arar.
Windows’ta şu anda yalnızca XBox 360 oyun kumandaları desteklenir. 360 oyun kumandanızı Windows bilgisayarınıza bağlamak için doğru yapılandırıldığından emin olun.
Oyun kumandaları Android derlemelerinde desteklenir ve diğer platformlarla aynı girdi eylemlerini üretir. Defold, yapılandırılmış oyun kumandası eşlemelerini kullanır ve eşleşen girdisi olmayan bazı kumandaları otomatik olarak eşleyebilir.
Bir kumanda tanımlanamıyorsa veya denetimleri yanlışsa Android cihazında test edip eşlemesini ekleyin veya güncelleyin. Sorun giderme için Tanımlanamayan oyun kumandaları ve Ham oyun kumandası girdileri bölümlerine bakın.