Tweaking and Settings - การปรับเปลี่ยนตัวแปรรันไทม์และการคงอยู่


19

บริษัท ส่วนใหญ่มีโปรแกรมแก้ไขหรือระบบควบคุมตัวแปรสำหรับปรับแต่งสิ่งต่าง ๆ ในเกม แต่มีมิดเดิลแวร์สำหรับแก้ไขปัญหานี้หรือไม่? ฉันเคยเขียนระบบสองอย่างนี้มาแล้วและทำงานร่วมกับระบบห้าระบบบางทีอาจจะแตกต่างกันไปหกระบบ แต่ไม่มีระบบไหนที่จะปิดชั้นวางได้

แต่ละวิธีแก้ปัญหาที่ปลูกเองเหล่านี้มีปัญหาตั้งแต่การรักษาค่าการค้นหาไปจนถึงการไม่สามารถบันทึกสถานะปัจจุบันของตัวแปรได้

มีไลบรารี / แอพการควบคุม Config / Runtime-variable ที่เป็นผู้ใหญ่หรือไม่?

ฉันใช้รหัสทั่วไปใน C ++ แต่ฉันคิดว่าตัวแก้ไขการตั้งค่า / ตัวแปรที่เป็นผู้ใหญ่อาจเป็นซอคเก็ตเบส การติดตั้งโค้ดจะต้องค่อนข้างง่าย (ฉันชอบบทความ hot_var / TweakableConstants ที่ Oskar แบ่งปัน แต่ไม่ใช่แพ็คเกจ)

คำตอบ:


8

ฉันชอบสิ่งที่ประสานเสียงเสนอในบล็อกของเขา Telnet ตาม Tweaker โดยการใช้ telnet เขาสามารถใช้ไคลเอ็นต์ telnet ใด ๆ เพื่อแก้ไขตัวแปร หลังจากนั้นพวกเขาสร้างกุยรอบ ๆ โปรโตคอล ดูเหมือนง่ายเพียงพอที่อาจไม่คุ้มค่ากับมิดเดิลแวร์ไลบรารี่ แต่การดูรหัสของเขาอาจมีประโยชน์

ฉันไม่เห็นด้วยกับความรู้สึกต่อต้าน Lua ของเขา คอนโซล Lua ระยะไกลดูดีมาก


พวกเขาใช้ Telnet สำหรับตัวแปรบิดใน MotoGP เกินไป: blogs.msdn.com/b/shawnhar/archive/2009/05/01/...
Kylotan

3
ทำไมต้องเทลเน็ต? HTTP / HTML เพื่อน! HTTP เป็นโพรโทคอลที่ง่ายมากและสามารถฝังในเกมได้อย่างง่ายดาย - ฉันเคยทำมาก่อนหน้านี้แล้ว
ZorbaTHut

3
ฉันจะบอกว่า Telnet ทำงานได้ดีและซับซ้อนน้อยกว่ามาก คุณสามารถทำได้ด้วยโค้ด 100 บรรทัดแทนที่จะเป็น 1,000 บรรทัดและยังช่วยให้สามารถอัปเดตได้แทนที่จะต้องสำรวจและดึงข้อมูลออกมา แต่ถ้าคุณต้องการ HTTP เพื่อวัตถุประสงค์อื่นในเกมของคุณฉันยอมรับว่ามันคุ้มค่าที่จะใช้ที่นี่เช่นกัน
Kylotan

5

บางทีความคิดของTweakable Constants ที่ตรงกับความต้องการของคุณ มันใช้งานได้จริง ๆ แล้วคุณคิดว่าคุณจะต้องมีโซลูชันที่ซับซ้อนเพื่อให้สามารถควบคุมตัวแปรเวลาทำงานได้อย่างมีประสิทธิภาพ แต่ในความเป็นจริงการใช้งานนั้นง่ายเกินไป การอภิปรายดั้งเดิมของเทคนิคนี้ยังเป็นที่น่าสนใจ

ตัวอย่าง:

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

แมโครขยายไปยังสิ่งที่ต้องการH HotValue(x, __FILE__, __LINE__, __COUNTER__)นี่เป็นการลงทะเบียนค่าให้กับรีจิสตรีส่วนกลาง จากนั้นมีฟังก์ชั่นอย่างRefreshHotValues()ที่คุณโทรเป็นระยะอย่างสม่ำเสมอ ฟังก์ชั่นการค้นหาแต่ละรายการในรีจิสทรีแยกวิเคราะห์ไฟล์ต้นฉบับที่เฉพาะเจาะจงและโหลดค่าร้อน

ในขณะที่คุณปรับเปลี่ยนซอร์สโค้ดจริงคุณคงอยู่ที่นั่น

เห็นได้ชัดว่านี้จะไม่ทำงานที่H()ไม่ได้รับการประเมินทุกกรอบ แต่มีวิธีการที่จะแก้ปัญหานี้เป็นที่กล่าวถึงที่นี่

คุณสามารถขยายแนวคิดนี้ไปยังโซลูชันที่ใช้ซ็อกเก็ตได้ อาจมีค่าใช้จ่ายที่สำคัญในการโทรHotValue()ทุกเฟรม แต่เนื่องจากคุณสามารถรวบรวมมาโครได้อย่างสมบูรณ์แทนที่มันด้วยค่าคงที่นี่ไม่ใช่ปัญหา


2
@Kylotan: คุณไม่มีจุด คุณกำลังแก้ไขซอร์สโค้ดจริงซึ่งได้รับการแยกวิเคราะห์ในเวลาทำงาน การติดตาคือผ่านแหล่งที่แก้ไข
Oskar N.

ใช่ฉันพลาดที่จะอ่านบทความนี้ ฉันจะลบความคิดเห็นของฉันและอ่านใหม่!
Kylotan

3
ฉันอาจจะเป็นแค่ฉัน แต่เทคนิคนี้ให้ความรู้สึก ... icky ฉันคิดว่าเป็นเพราะฉันใช้เวลามากกับการเกลียดหมายเลขเวทย์มนตร์และนี่จะใช้ได้กับหมายเลขเวทย์มนตร์เท่านั้น ฉันอยากเห็นสีที่ชัดเจนเป็นส่วนหนึ่งของไฟล์ปรับแต่งหรือสคริปต์ ความมหัศจรรย์ที่มาพร้อมกับความสามารถในการโหลดทรัพยากรร้อน
deft_code

@caspin: คุณสามารถใช้ตัวแปรธรรมดาและแทนที่จะมีH(int, myvar, 5)และเมื่อมีการเปลี่ยนแปลงไฟล์ที่คุณแทนที่myvarในหน่วยความจำ ดูmollyrocket.com/forums/viewtopic.php?p=5395#5395
Oskar N.

1

AntTweakBarมีประโยชน์จริง ๆ สำหรับสิ่งที่คุณต้องการทำอย่างไรก็ตามส่วนใหญ่คุณต้องการมีวิธีการที่ 'รวบรวม' ในรุ่นที่มีมาโครหรือคล้ายกัน


0

จากคำถามเกี่ยวกับการแก้จุดบกพร่องเวลาจริงมาตอบเดวิด McGraw ของเกี่ยวกับAsyncSocketสำหรับนักพัฒนา iOS ดูคำตอบของเขาสำหรับข้อมูลเพิ่มเติม


แม้ว่าจะฟังดูดี แต่ก็ไม่ใช่วิธีแก้ปัญหา มันเป็นเครื่องมือที่มีประโยชน์ในการแก้ปัญหา
Richard Fabian

0

การจัดการการตั้งค่าดูเหมือนจะเป็นหนึ่งในสิ่งเหล่านั้นที่ได้ทำใหม่ตั้งแต่ต้นสำหรับทุกเกมอาจเป็นเพราะความเรียบง่ายและความผันแปรสูงในการตั้งค่าประเภทที่ต้องการ สมมติว่าคุณมีการตั้งค่าแบ็คเอนด์หน่วยเก็บข้อมูลที่เหมาะสม (SQL / อะไรก็ตาม) คุณสามารถเขียนรหัสโซลูชันที่มีประสิทธิภาพเพื่อการจัดการการตั้งค่าในหนึ่งวันหรือ 2 วันดังนั้นดูเหมือนว่าธุรกิจของคุณจะไม่ต้องการโซลูชันมิดเดิลแวร์ ฉันคิดว่าวิธีที่ดีที่สุดในกรณีส่วนใหญ่


1
สิ่งนี้ไม่เกี่ยวกับข้อมูลการตั้งค่า แต่เป็นเรื่องเกี่ยวกับการปรับแต่งตัวแปรรันไทม์สำหรับการดีบักหรือเล่นเกม

ตัวแปรรันไทม์หลายประเภทสำหรับการดีบักและเล่นเกมมีเหตุผลที่จะเก็บไว้ในแบ็คเอนด์แบบถาวร การทำเช่นนี้ช่วยให้สามารถทำการเปลี่ยนแปลงได้ทั่วทั้งระบบเมื่อคุณปรับใช้ SQL เป็นเพียงตัวอย่างของ back end คุณสามารถแก้ไขข้อมูลไปยังไฟล์บนดิสก์หรือวิธีอื่นใดก็ได้
Ben Zeigler

1
ปัญหาคือทำให้พวกเขาเปลี่ยนในเวลาจริง อาจเกี่ยวข้องกับการตั้งค่าทริกเกอร์บน DB และบางอย่างในเกมที่สามารถจัดการทริกเกอร์นั้นและอ่านค่าแบบอะซิงโครนัสในขณะที่เกมยังคงทำงานต่อไป ไม่สามารถเอาชนะได้ แต่ก็ไม่ง่ายนักเช่นกัน
Kylotan

รหัสที่จัดการทริกเกอร์ DB นั้นจะเป็นรหัสที่ Richard กำลังมองหาและเป็นส่วนที่น่าสนใจ / นำมาใช้ซ้ำได้ การย้ายค่าคงที่ไปยังฐานข้อมูลแทนที่จะเป็นระบบไฟล์หรือเครื่องมืออื่นไม่ทำให้โค้ดนั้นปรากฏอย่างน่าอัศจรรย์และอาจทำให้ซับซ้อนยิ่งขึ้น

-1

ฉันได้รับจริงความคิดเกี่ยวกับสิ่งดังกล่าวเมื่อเร็ว ๆ นี้และผมคิดว่ามันจะเป็นผู้สมัครที่ดีสำหรับAndroid app จับคู่กับห้องสมุดขนาดเล็กในสิ่งที่ภาษาที่คุณต้องการ แอพนี้จะเป็นชุดปุ่มสลับแบบเลื่อนลง ฯลฯ ที่ปรับแต่งได้ (วิดเจ็ตใด ๆ ที่คุณต้องการ) และมันจะส่งการกระทำผ่าน WLAN (หรือ USB หากคุณต้องการทำให้สิ่งต่าง ๆ ซับซ้อน) ไปยังห้องสมุด ห้องสมุดจะวางไข่จากเธรดแยกต่างหากและจะรู้ว่าตัวควบคุมใดบนโทรศัพท์ Android ที่สอดคล้องกับตัวแปรใดในเกม (คุณต้องตั้งค่าไว้ในรหัสเริ่มต้น) และจะเชื่อมต่อกับแอพ Android

จากนั้นการเล่นเกมของคุณก็ง่ายดายเหมือนการสัมผัสสิ่งต่างๆในโทรศัพท์ของคุณ คุณสามารถมี textboxes บนโทรศัพท์ซึ่งแสดงค่าตัวแปรเรียลไทม์จากเกมหรือคุณอาจมีไลบรารี่ไปข้างหน้าstdinหรือstderrไปยัง textarea แบบเลื่อนบนโทรศัพท์ ตัวเลือกนั้นไร้ขีด จำกัด !

ข้อกังวลที่แท้จริงเพียงอย่างเดียวคือความเร็ว หากความเร็วและเวลาในการตอบสนองมีความสำคัญคุณเพียงเชื่อมต่อโทรศัพท์ผ่าน USB และ adb (android debugger) รองรับการส่งต่อพอร์ตผ่าน USB ไปยังโทรศัพท์ แต่อย่างอื่น WLAN จะมีความล่าช้าเล็กน้อยซึ่งฉันคิดว่าจะเป็นที่ยอมรับอย่างมากสำหรับวัตถุประสงค์นี้

ฉันไม่คิดว่าสิ่งต่าง ๆ ตามที่เขียนไว้ข้างต้น แต่ฉันได้พิจารณาเขียนอย่างมาก (ฉันเพิ่งยังไม่ได้พัฒนาเกมของตัวเองมากพอที่จะต้องการ)

แน่นอนว่าพวกคุณที่เป็นผู้ใช้ Apple อาจทำเช่นเดียวกันกับ iDevices ของคุณ ฉันพบว่าการพัฒนา iOS เป็นการสั่งซื้อขนาดใหญ่ยากกว่าการพัฒนา Android และแน่นอนว่าแอปข้างต้นสามารถเผยแพร่ไปยังตลาด Android ได้อย่างง่ายดายเพื่อการกระจายที่ง่ายในขณะที่ Apple อาจไม่อนุญาตให้มีเครื่องมือสำหรับนักพัฒนาใน app store ดังนั้น รู้สึกว่าแพลตฟอร์ม Android เหมาะกับเครื่องมือนี้ดีกว่า


นี่จะหวานในสภาพแวดล้อมที่ทำงาน เดินไปคุยกับศิลปินแล้วเชื่อมต่อและเริ่มเล่นเกมทำงานของนักออกแบบที่อยู่ใกล้เคียงในขณะที่เขากำลังพยายามเผชิญหน้ากัน ...
dash-tom-bang

1
ฉันไม่เข้าใจถึงประโยชน์ของการมีไว้ในโทรศัพท์ของคุณมากกว่าบนคอมพิวเตอร์ที่คุณกำลังพัฒนาด้วย
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.