Tinh chỉnh và Cài đặt - Sửa đổi và kiên trì biến thời gian chạy


19

Hầu hết các công ty đều có trình chỉnh sửa hoặc hệ thống điều khiển biến để điều chỉnh nội dung trong trò chơi, nhưng có giải pháp phần mềm trung gian nào cho vấn đề này không? Bản thân tôi đã viết hai hệ thống như vậy trong quá khứ và đã làm việc với năm, có thể sáu hệ thống khác nhau, nhưng không có hệ thống nào trong số chúng được đưa ra khỏi kệ.

Mỗi giải pháp được trồng tại nhà này đều có vấn đề, từ việc phải tiếp tục tìm kiếm các giá trị, đến việc không thể lưu trạng thái hiện tại của các biến.

Có bất kỳ thư viện / ứng dụng điều khiển biến cấu hình / thời gian chạy trưởng thành nào không?

Tôi thường viết mã bằng C ++, nhưng tôi nghĩ rằng một trình soạn thảo cài đặt / biến trưởng thành có thể sẽ dựa trên socket (và do đó không biết ngôn ngữ ở một mức độ nào đó) vì tất cả phần cứng phát triển hiện tại ngoài công cụ Nintendo cung cấp một cơ chế để nói chuyện với máy chủ. Việc triển khai mã cũng cần khá đơn giản (tôi thích bài viết hot_var / TweakableConstants được chia sẻ bởi Oskar, nhưng nó không phải là một gói)

Câu trả lời:


8

Tôi thích những gì Noel đề xuất trên blog của mình. Một tweaker biến dựa trên telnet . Bằng cách sử dụng telnet, anh ta có thể sử dụng bất kỳ máy khách telnet nào để chỉnh sửa các biến. Sau đó, họ đã xây dựng một gui xung quanh giao thức. Nó có vẻ đủ đơn giản, có lẽ nó không đáng là một thư viện phần mềm trung gian nhưng nhìn vào mã của anh ta có thể hữu ích.

Tôi không đồng ý với tình cảm chống Lua của anh ấy. Một giao diện điều khiển Lua từ xa có vẻ tuyệt vời.


Họ đã sử dụng telnet cho các biến tinh chỉnh trên MotoGP quá: blogs.msdn.com/b/shawnhar/archive/2009/05/01/...
Kylotan

3
Tại sao Telnet? HTTP / HTML, anh bạn! HTTP là một giao thức rất đơn giản và có thể dễ dàng nhúng vào một trò chơi - tôi đã thực hiện nó trước đây, nó nằm dưới hàng ngàn dòng mã.
ZorbaTHut

3
Tôi có thể nói rằng Telnet thực hiện công việc khá tốt và ít phức tạp hơn nhiều. Bạn có thể làm điều đó trong 100 dòng mã chứ không phải 1000. Và nó cũng cho phép đẩy các bản cập nhật thay vì phải thăm dò và kéo chúng. Nhưng nếu bạn cần HTTP cho bất kỳ mục đích nào khác trong trò chơi của mình, tôi đồng ý rằng nó cũng đáng để sử dụng nó ở đây.
Kylotan

5

Có lẽ ý tưởng về Tweakable Constants phù hợp với nhu cầu của bạn. Thực tế là có thể sử dụng đến mức bạn nghĩ rằng bạn sẽ cần một giải pháp phức tạp để kiểm soát các biến thời gian chạy hiệu quả, nhưng trên thực tế, việc thực hiện gần như quá đơn giản. Các thảo luận ban đầu của kỹ thuật này cũng là một bài đọc thú vị.

Thí dụ:

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

Các Hmacro mở rộng đến một cái gì đó như HotValue(x, __FILE__, __LINE__, __COUNTER__). Điều này đăng ký giá trị cho một số đăng ký toàn cầu. Sau đó, có một chức năng như thế RefreshHotValues()mà bạn gọi đều đặn. Hàm tìm kiếm từng mục trong sổ đăng ký, phân tích tệp nguồn cụ thể và tải lại giá trị nóng.

Khi bạn sửa đổi mã nguồn thực tế, bạn có sự kiên trì ngay tại đó.

Rõ ràng điều này sẽ không hoạt động khi H()không được đánh giá mọi khung hình, nhưng có nhiều cách để giải quyết vấn đề này như được thảo luận ở đây .

Bạn có thể mở rộng ý tưởng này thành một giải pháp dựa trên ổ cắm, có lẽ. Có thể có một chi phí hiệu năng đáng kể để gọi HotValue()mọi khung hình, nhưng vì bạn rất dễ dàng có thể biên dịch macro thay thế hoàn toàn nó bằng hằng số nên đây không phải là vấn đề.


2
@Kylotan: Bạn đang thiếu điểm. Bạn đang sửa đổi mã nguồn thực tế, được phân tích cú pháp tại thời gian chạy. Sự kiên trì là thông qua các nguồn sửa đổi.
Oskar N.

Vâng, bằng cách nào đó tôi đã bỏ lỡ điều đó trong việc lướt qua bài viết. Tôi sẽ xóa bình luận của tôi và đọc lại!
Kylotan

3
Tôi có thể chỉ là tôi nhưng kỹ thuật này cảm thấy ... icky. Tôi nghĩ rằng đó là vì tôi đã dành quá nhiều thời gian để ghét các con số ma thuật và điều này sẽ chỉ hoạt động đối với các con số ma thuật. Tôi muốn thấy màu rõ ràng là một phần của tập tin cấu hình hoặc tập lệnh. Sự kỳ diệu đi kèm với khả năng tải tài nguyên nóng.
deft_code

@caspin: Bạn có thể sử dụng các biến đơn giản và thay vào đó có H(int, myvar, 5)và khi thay đổi tệp, bạn thay thế myvarbộ nhớ trong. Xem mollyrocket.com/forums/viewtopic.php?p=5395#5395
Oskar N.

1

AntTweakBar thực sự hữu ích cho những gì bạn muốn làm, tuy nhiên, hầu hết thời gian, bạn muốn có các phương thức 'biên dịch đi' khi phát hành với một số macro hoặc tương tự.



0

Quản lý cài đặt dường như là một trong những điều được làm lại từ đầu cho mọi trò chơi, có lẽ là do nó tương đối đơn giản và độ biến thiên cao trong các loại cài đặt cần thiết. Giả sử bạn có một thiết lập phụ trợ lưu trữ hợp lý (SQL / bất cứ thứ gì), bạn có thể mã hóa một giải pháp mạnh mẽ để quản lý cài đặt trong một hoặc hai ngày, do đó dường như không có nhu cầu kinh doanh thực sự cho giải pháp phần mềm trung gian. Tôi nghĩ rằng cách tốt nhất để sử dụng để lưu trữ thông tin người chơi là cách tốt nhất để sử dụng trong hầu hết các trường hợp.


1
Đây không phải là về thông tin cài đặt, mà là về việc điều chỉnh các biến thời gian chạy cho mục đích gỡ lỗi hoặc chơi trò chơi.

Nhiều loại biến thời gian chạy để gỡ lỗi và mục đích chơi trò chơi có ý nghĩa để lưu trữ trong một số loại back end dai dẳng. Điều này cho phép thay đổi chúng trên toàn bộ hệ thống khi bạn triển khai. SQL chỉ là một ví dụ về mặt sau, bạn có thể vá thông tin vào một tệp trên đĩa hoặc bất kỳ số phương thức nào khác.
Ben Zeigler

1
Vấn đề là làm cho họ thay đổi trong thời gian thực. Điều đó có thể liên quan đến việc thiết lập một số loại kích hoạt trên DB và một cái gì đó trong trò chơi có thể xử lý kích hoạt đó và đọc lại các giá trị không đồng bộ trong khi trò chơi tiếp tục chạy. Không phải là không thể vượt qua, nhưng cũng không đơn giản khủng khiếp.
Kylotan

Mã quản lý trình kích hoạt DB đó sẽ là mã mà Richard đang tìm kiếm và là phần thú vị / có thể tái sử dụng. Di chuyển các hằng số sang DB thay vì hệ thống tập tin hoặc công cụ khác không làm cho mã đó xuất hiện một cách kỳ diệu và có lẽ chỉ làm cho nó phức tạp hơn.

-1

Gần đây tôi đã suy nghĩ về một điều như vậy và tôi nghĩ rằng nó sẽ là một ứng cử viên tuyệt vời cho một ứng dụng Android được ghép nối với một thư viện nhỏ bằng bất kỳ ngôn ngữ nào bạn muốn . Ứng dụng sẽ là một tập hợp các nút, nút bật tắt, thả xuống, v.v. (bất kỳ tiện ích nào bạn muốn) và nó sẽ gửi các hành động qua mạng WLAN (hoặc USB nếu bạn muốn làm phức tạp mọi thứ) đến thư viện. Thư viện sẽ sinh ra một luồng riêng biệt từ trò chơi và sẽ biết điều khiển nào trên điện thoại Android tương ứng với biến nào trong trò chơi (bạn đặt chúng trong mã khởi động của mình) và sẽ có kết nối với ứng dụng Android.

Sau đó, gây rối với trò chơi của bạn cũng dễ như chạm vào những thứ trên điện thoại của bạn. Bạn thậm chí có thể có một số hộp văn bản trên điện thoại hiển thị các giá trị biến thời gian thực từ trò chơi hoặc bạn có thể đưa thư viện về phía trước stdinhoặc stderrđến một văn bản cuộn trên điện thoại. Các tùy chọn là vô hạn!

Mối quan tâm thực sự duy nhất là với tốc độ. Nếu tốc độ và thời gian phản ứng là rất quan trọng thì bạn chỉ cần kết nối điện thoại qua USB và adb (trình gỡ lỗi Android) hỗ trợ chuyển tiếp cổng qua USB sang điện thoại. Nhưng nếu không, mạng WLAN sẽ chỉ có độ trễ rất nhỏ mà tôi nghĩ sẽ có thể chấp nhận được cho mục đích này.

Tôi không nghĩ những điều như trên đã được viết, nhưng tôi đã cân nhắc mạnh mẽ việc viết nó. (Tôi chưa đủ khả năng phát triển các trò chơi của riêng mình để cần nó)

Tất nhiên, những người trong số bạn là người dùng Apple có thể có thể làm điều tương tự với iDevices của bạn. Cá nhân tôi thấy việc phát triển iOS trở nên khó khăn hơn so với phát triển Android và tất nhiên ứng dụng trên có thể dễ dàng được phát hành ra thị trường Android để phân phối dễ dàng trong khi Apple có thể không cho phép công cụ dành cho nhà phát triển vào cửa hàng ứng dụng, vì vậy tôi cảm thấy nền tảng Android phù hợp hơn với công cụ này.


Điều này sẽ ngọt ngào trong một môi trường văn phòng. Đi bộ để nói chuyện với một nghệ sĩ, kết nối và bắt đầu nghịch ngợm với trò chơi đang chạy của nhà thiết kế hàng xóm trong khi anh ta cố gắng thiết lập một số cuộc gặp gỡ ...
dash-tom-bang

1
Tôi không hiểu lợi ích của việc có nó trên điện thoại của bạn hơn là trên máy tính mà bạn đang thực sự phát triển.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.