2011-11-18 11 views
6

के लिए मुझे किस दृष्टिकोण का उपयोग करना चाहिए, मैं एक कण प्रणाली लिख रहा हूं। (एक खेल और एक कण संपादक के लिए) इस प्रणाली में 0 से एन संशोधक हैं। वे प्रत्येक फ्रेम कण प्रणाली में कणों को संशोधित करते हैं।सी # स्क्रिप्टिंग

उदाहरण के लिए आप "ग्रेविटीमोडिफायर" नामक पूर्वनिर्धारित संशोधक हो सकते हैं जो प्रत्येक फ्रेम को प्रत्येक फ्रेम में निम्नलिखित करता है: "particle.Velocity.Y + = 9.81" या ऐसा कुछ।

अब मैं चाहता हूं कि उपयोगकर्ता रनटाइम (संपादक में) पर अतिरिक्त संशोधक लिखने में सक्षम हो। मैं इसके लिए सी # का उपयोग करने में सक्षम होना चाहता हूं। और चूंकि कण सिस्टम JSON फ़ाइलों को लिखे गए हैं, इसलिए कस्टम संशोधक स्क्रिप्ट को फ़ाइल में स्रोत कोड (शायद बेस 64 एन्कोडेड) के रूप में लिखा जाना चाहिए।

-

मेरा प्रश्न है: मान लें खेल इस तरह के एक कण प्रणाली फ़ाइल को लोड करना चाहता है। मैं कस्टम संशोधक कोड में कस्टम संशोधक कैसे संकलित करूं?

इस प्रश्न का उत्तर देने पर विचार करने के लिए एक और महत्वपूर्ण बात: ध्यान दें कि यह एक गेम के लिए एक कण प्रणाली होगी। संकलित कोड प्रत्येक फ्रेम 3000 से अधिक बार कहा जाएगा। (ज्यादातर 60fps पर) तो यह बहुत महत्वपूर्ण है कि संकलित कोड को अन्य गेम-फ़ंक्शंस की तुलना में निष्पादित करने में अधिक समय नहीं लगता है। फॉर्म के प्रतिनिधियों में संकलित संशोधक स्क्रिप्ट को रखना अच्छा लगेगा: प्रतिनिधि शून्य ModifyParticle (रेफ कण पी);

क्या यह संभव है? यदि हां, तो कैसे?

+0

आप इस विषय को [gamedev] (http://gamedev.stackexchange.com/) पर खोजकर कुछ अच्छे विचार भी प्राप्त कर सकते हैं। लेकिन, मुझे लगता है कि यह अभी भी इस साइट के लिए एक अच्छा सवाल है। – jadarnel27

+0

मुझे लगता है कि कुछ वाणिज्यिक गेम (द्वितीय जीवन) हैं जो मोनो को एक स्क्रिप्टिंग इंजन के रूप में उपयोग करते हैं: http://www.mono-project.com/Scripting_With_Mono –

उत्तर

5

हाँ,

यह संभव है और काफी सरल CSScript library का उपयोग कर रहा है।

+0

वाह धन्यवाद। मुझे ठीक इसी की आवश्यकता थी! विशेष रूप से LoadMethod (...) और GetStaticMethod() के साथ उदाहरण यह अपेक्षा के अनुसार काम करता है और एक "मूल" स्थैतिक विधि निष्पादित करने के समान गति प्रदान करता है! यह पूर्ण है। – riki

6

'Roslyn' C# compiler as a service API, जहां इस तरह के एक आरईपीएल आदि के रूप में कार्यावधि में परिभाषित सी # कोड निष्पादित कर सकते हैं, की एक CTP नहीं है यहाँ एक MSDN अनुच्छेद यह कवर कर रहा है
http://visualstudiomagazine.com/articles/2011/11/16/the-roslyn-scripting-api.aspx

मोनो थोड़ी देर के लिए इस कार्यक्षमता पड़ा है उनके Mono.CSharp library में ताकि एक विकल्प के रूप में इस्तेमाल किया जा सके।

2

Roslyn देखें, यह आगामी .NET Framework में सी # कंपाइलर-ए-ए-सर्विस सुविधा का आगामी (लेकिन अभी भी बहुत प्रारंभिक बीटा) पूर्वावलोकन है।

0

इसके बारे में Lua इसके बजाय कैसे? देखें here लुआ एक fantastically सरल पटकथा भाषा है और खेल क्रियाओं में पटकथा के लिए आदर्श है। आईफोन गेम के काफी सारे उद्देश्य लुआ का उद्देश्य उद्देश्य-सी में करते हैं, और वहां बहुत अच्छे लोग हैं जो लूआ का उपयोग नेट के माध्यम से करते हैं।

0

नेट CSharpCodeProvider में Microsoft से संकलक में बनाया का उपयोग करें:

कैसे प्रोग्राम के रूप में सी # संकलक का उपयोग कर कोड को संकलित करने के:

.नेट फ्रेमवर्क वर्गों की अनुमति को उजागर करता है आप के लिए प्रोग्राम के रूप में पहुँच सी # भाषा संकलक। यह उपयोगी हो सकता है यदि आप अपनी कोड-संकलन उपयोगिताएं लिखना चाहते हैं। यह आलेख नमूना कोड प्रदान करता है जो आपको टेक्स्ट स्रोत से कोड संकलित करने में सक्षम बनाता है। एप्लिकेशन आपको या तो निष्पादन योग्य बनाने या निष्पादन योग्य बनाने और इसे चलाने की अनुमति देता है। संकलन प्रक्रिया के दौरान होने वाली कोई भी त्रुटि फ़ॉर्म पर प्रदर्शित होती है।

http://support.microsoft.com/kb/304655

सीधे शब्दों में संकलन और बाइनरी लोड जब आप खेल शुरू करते हैं।

अधिक कैसे dll और लोड संकलित करने के लिए/इसे सीधे अमल का उदाहरण http://msdn.microsoft.com/en-us/library/microsoft.csharp.csharpcodeprovider.aspx में पाया जा सकता है और इसके समुदाय सामग्री जोड़ा।

+0

नीचे वोट पर विस्तार करने के लिए देखभाल? – stefan