Tweaking and Settings - Çalışma zamanı değişkeni değişikliği ve kalıcılığı


19

Çoğu şirket, oyunlarda düzenleme yapmak için bir düzenleyiciye veya değişken bir kontrol sistemine sahiptir, ancak bu sorunun orta katman çözümleri var mı? Geçmişte bu tür iki sistemi kendim yazdım ve beş, belki altı farklı sistemle çalıştım, ancak hiçbiri rafta değildi.

Evde yetiştirilen bu çözümlerin her biri, değerleri aramaya devam etmekten değişkenlerin mevcut durumunu kaydedememeye kadar değişen problemlere sahipti.

Yetişkin yapılandırma / çalışma zamanı değişkeni kontrol kitaplıkları / uygulamaları var mı?

Ben genellikle C ++ kod, ama olgun bir ayarlar / değişkenler editörü Nintendo şeyler dışında tüm mevcut geliştirme donanım sunucuları konuşmak için bir mekanizma sağlar gibi muhtemelen soket tabanlı (ve bu nedenle bir ölçüde dil agnostik) olacağını düşünürdüm. Kod uygulaması da oldukça basit olmalı (Oskar tarafından paylaşılan hot_var / TweakableConstants makalesini seviyorum, ancak bir paket değil)

Yanıtlar:


8

Noel'in blogunda önerilerini beğendim . Bir telnet değişken tweaker göre . Telnet kullanarak değişkenleri düzenlemek için herhangi bir telnet istemcisini kullanabildi. Daha sonra protokolün etrafında bir gui oluşturdular. Yeterince basit görünüyor, muhtemelen bir ara katman kütüphanesine değmez, ancak koduna bakmak faydalı olabilir.

Ancak onun Lua karşıtı hissine katılmıyorum. Uzak bir Lua konsolu harika görünüyor.


MotoGP'deki tweak değişkenleri için de telnet kullandılar: blogs.msdn.com/b/shawnhar/archive/2009/05/01/…
Kylotan

3
Neden Telnet? HTTP / HTML, ahbap! HTTP çok basit bir protokoldür ve bir oyuna kolayca gömülebilir - daha önce yaptım, bin satır kodun altındaydı.
ZorbaTHut

3
Telnet'in işi oldukça iyi yaptığını ve çok daha az karmaşık olduğunu söyleyebilirim. Bunu 1000 yerine 100 kod satırında yapabilirsiniz. Ayrıca, güncellemeleri sorgulamak ve çekmek yerine güncellemeye de izin verir. Ancak, oyununuzda başka bir amaçla HTTP'ye ihtiyacınız varsa, burada da kullanmaya değer olduğunu kabul ediyorum.
Kylotan

5

Belki Tweakable Sabitler fikri ihtiyaçlarınızı karşılar. Aslında etkili bir çalışma zamanı değişkenleri kontrolü için karmaşık bir çözüme ihtiyacınız olacağını düşünebilirsiniz , ancak gerçekte uygulama neredeyse çok basittir. Orijinal tartışma bu tekniğin da ilginç bir okuma.

Misal:

glClearColor( H(1.0f), H(1.0f), H(1.0f), H(1.0f) );

HMakro gibi genişler HotValue(x, __FILE__, __LINE__, __COUNTER__). Bu, değeri bazı genel kayıt defterine kaydeder. Sonra RefreshHotValues()düzenli aralıklarla çağırmak gibi bir işlevi var . İşlev kayıt defterindeki her girdiyi arar, belirli kaynak dosyasını ayrıştırır ve etkin değeri yeniden yükler.

Gerçek kaynak kodunu değiştirdikçe, orada kalıcılığınız olur.

Açıkçası bu, H()her çerçevenin değerlendirilmediği yerlerde işe yaramayacaktır , ancak burada tartışıldığı gibi bunu çözmenin yolları vardır .

Belki de bu fikri soket tabanlı bir çözüme genişletebilirsiniz. HotValue()Her kareyi çağırmak için önemli bir performans yükü olabilir , ancak makroyu tamamen kolayca sabitleyebildiğiniz için, sabit ile değiştirerek bu bir sorun değildir.


2
@Kylotan: Konuyu kaçırıyorsun. Çalışma zamanında ayrıştırılan gerçek kaynak kodunu değiştiriyorsunuz. Kalıcılık değiştirilmiş kaynaklardan geçer.
Oskar N.

Evet, bir şekilde makaleyi gözden kaçırırken kaçırdım. Yorumumu silip tekrar okuyacağım!
Kylotan

3
Ben sadece kendim olabilirim ama bu teknik ... icky. Bence sihirli sayılardan nefret etmek için çok zaman harcadım ve bu sadece sihirli sayılar için işe yarayacak. Net rengin bir config veya script dosyasının parçası olmasını tercih ederim. Sihir, kaynakları sıcak yükleme yeteneğiyle birlikte gelir.
usta_code

@caspin: Düz değişkenler kullanabilir ve bunun yerine H(int, myvar, 5)dosyada değişiklik olduğunda myvarve bellekte değiştirirsiniz . Bkz mollyrocket.com/forums/viewtopic.php?p=5395#5395
Oskar

1

AntTweakBar , yapmak istediğiniz şey için gerçekten yararlıdır, ancak çoğu zaman, bazı makrolar veya benzerleriyle serbest bırakıldığında 'derleyen' yöntemlere sahip olmak istersiniz.



0

Ayar yönetimi, muhtemelen ne kadar basit olduğu ve gerekli ayar türlerindeki yüksek değişkenlik nedeniyle, her oyun için sıfırdan yeniden yapılan şeylerden biri gibi görünüyor. İyi bir depolama arka uç kurulumuna (SQL / ne olursa olsun) sahip olduğunuzu varsayarsak, bir veya iki gün içinde ayarlar yönetimine sağlam bir çözüm kodlayabilirsiniz, böylece bir ara yazılım çözümü için çok fazla gerçek iş ihtiyacı yoktur. Oyuncu bilgi depolaması için kullandığınız her şeyin üzerine koymak, çoğu durumda en iyi yol olduğunu düşünüyorum.


1
Bu, ayar bilgileriyle ilgili değildir, hata ayıklama veya oyun oynamak için çalışma zamanı değişkenlerini değiştirmektir.

Hata ayıklama ve oyun oynama için birçok çalışma zamanı değişkeni türü, bir tür kalıcı arka uçta saklamak için mantıklıdır. Bu, dağıtırken bunların tüm sistem genelinde değiştirilmesine izin verir. SQL sadece bir arka uç örneğidir, bilgileri diskteki bir dosyaya veya diğer birçok yönteme yatırabilirsiniz.
Ben Zeigler

1
Sorun gerçek zamanlı olarak değişmelerini sağlamak. Bu muhtemelen DB üzerinde bir tür tetikleyici ve oyun devam ederken bu tetikleyiciyi işleyebilen ve değerleri eşzamansız olarak yeniden okuyabilen bir şey ayarlamayı içerir. Ayrılmaz değil, ama çok basit değil.
Kylotan

DB tetikleyicisini yöneten kod, Richard'ın aradığı koddur ve ilginç / yeniden kullanılabilir kısımdır. Sabitleri dosya sistemi veya başka bir araç yerine bir DB'ye taşımak, bu kodu sihirli bir şekilde göstermez ve muhtemelen daha karmaşık hale getirir.

-1

Aslında son zamanlarda böyle bir şey düşünüyordum ve bence bu, istediğiniz dilde küçük bir kütüphane ile eşleştirilmiş bir Android uygulaması için harika bir aday olurdu . Uygulama, özelleştirilebilir bir düğme, geçiş, açılır menü vb. (İstediğiniz herhangi bir widget) olacaktır ve eylemleri WLAN (veya işleri karmaşık hale getirmek istiyorsanız USB) aracılığıyla kütüphaneye gönderir. Kütüphane oyundan ayrı bir iş parçacığı oluşturacaktı ve Android telefondaki hangi kontrollerin oyunda hangi değişkenlere karşılık geldiğini (başlangıç ​​kodunuzda ayarlayacaksınız) ve Android uygulamasıyla bir bağlantısı olacağını bilirdi.

Ardından, oyununuzla uğraşmak telefonunuzdaki şeylere dokunmak kadar kolaydır. Telefonda, oyundan gerçek zamanlı değişken değerleri gösteren bazı metin kutularınız bile olabilir veya kitaplığı ileriye stdinveya stderrtelefonda kayan bir metin alanına sahip olabilirsiniz . Seçenekler sınırsız!

Tek gerçek endişe hız. Hız ve tepki süresi çok önemliyse, telefonu sadece USB ile bağlarsınız ve adb (android hata ayıklayıcı), USB üzerinden telefona yönlendirme bağlantı noktalarını destekler. Ancak aksi takdirde, WLAN'ın bu amaç için kabul edilebilir olacağını düşündüğüm çok küçük bir gecikme olurdu.

Yukarıdakilerin yazıldığı gibi bir şey olduğunu düşünmüyorum, ama yazmayı kesinlikle düşünüyorum. (Henüz ihtiyacım olan kendi oyunlarımın geliştirilmesine yeteri kadar ulaşamadım)

Tabii ki, Apple kullanıcıları olanlarınız muhtemelen iDevices'inizle aynı şeyi yapabilir. Kişisel olarak iOS geliştirmenin Android geliştirmeden daha zor siparişler olduğunu düşünüyorum ve elbette yukarıdaki uygulama kolay dağıtım için Android pazarında kolayca yayınlanabilirken, Apple muhtemelen bir geliştirici aracının uygulama mağazasına girmesine izin vermiyordu, bu yüzden Android platformunun bu araca daha iyi uyduğunu hissedin.


Bu bir ofis ortamında tatlı olurdu. Bir sanatçı ile konuşmak için yürüyün ve bazı karşılaşmalar kurmaya çalışırken komşu tasarımcının koşu oyununa bağlanın ve uğraşmaya başlayın ...
dash-tom-bang

1
Aslında geliştirme yaptığınız bilgisayarda değil, telefonunuzda olmanın faydasını anlamıyorum.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.