2008-12-18 15 views
6

की तुलना में जीयूआई और गेम प्रोग्राम फ्लो कैसा है, मैं थोड़ी देर के लिए वेब एप्लिकेशन विकसित कर रहा हूं और जीयूआई और गेम एप्लिकेशन डेवलपमेंट में अपने पैर की अंगुली को डुबो दिया है।वेब प्रोग्राम

वेब एप्लिकेशन (मेरे लिए PHP) में, फ़ाइल में एक अनुरोध किया जाता है, उस फ़ाइल में जानकारी को संसाधित करने के लिए सभी आवश्यक फाइलें शामिल होती हैं, फिर प्रवाह प्रत्येक अनुरोध के लिए ऊपर से नीचे तक होता है। (मुख्य रूप से)

मुझे पता है कि खेलों के लिए गेम लूप के भीतर कार्रवाई होती है, लेकिन एक ही लूप (मेनू सिस्टम, गुई, संपत्तियों की लोडिंग और 3 डी दुनिया) में एक गेम के सभी अलग-अलग तत्व कैसे होते हैं कुछ चीजों की निरंतर लोडिंग और अनलोडिंग।

जीयूआई कार्यक्रमों के लिए, मुझे विश्वास है कि कुछ प्रकार के "एप्लिकेशन लूप" हैं।

क्या अधिकांश आइटम स्मृति में बुलाए जाते हैं और फिर एक्सेस किए जाते हैं, क्या आवश्यक वस्तुओं के साथ जुड़े हुए आइटम और लोड हो जाते हैं?

मुझे वेब अनुप्रयोगों को तेज़ी से विकसित करने में क्या मदद मिली, जब मैं प्रोग्राम के प्रवाह को समझ गया, तो इसे विस्तृत विचार, सामान्य विचार या छद्म कोड नहीं होना चाहिए।

उत्तर

14

इन सभी में लगभग हमेशा एक लूप होता है - लेकिन ऐसा कुछ नहीं है जिसे आप अपने अधिकांश विकास के दौरान सोचने के लिए सोचते हैं।

आप एक कदम पीछे जाएं, तो अपने वेब ऐप्लिकेशन एक पाश के आसपास आधारित होते हैं - वेब सर्वर के accept() पाश:

while(listening) { 
    get a socket connection; 
    handle it; 
} 

.. लेकिन एक वेब डेवलपर के रूप में, तो आप उस से बच रहे हैं, और लिखना 'ईवेंट संचालित' कोड - 'जब कोई इस यूआरएल का अनुरोध करता है, तो यह करें'।

GUIs भी कार्यक्रम चालित हैं, और घटनाओं को भी एक पाश कहीं से पता चला है:

while(running) { 
    get mouse/keyboard/whatever event 
    handle it 
} 

लेकिन एक जीयूआई डेवलपर पाश के बारे में सोचना बहुत जरूरत नहीं है। वे लिखते हैं 'जब माउस क्लिक होता है, तो यह करें'।

खेलों, फिर से वही।

while(game is in progress) { 
    invoke every game object's 'move one frame' method; 
    poll for an input event; 
} 

... जबकि अन्य कोड एक और अधिक घटना पर ही आधारित शैली में लिखा है: 'जब एक गोली वस्तु इस वस्तु के साथ मेल खाता, एक विस्फोट घटना ट्रिगर' किसी ने एक पाश लिखने के लिए है।

मैं एक वस्तु है कि एक "दृश्य" खेल में का एक बहुत ही सामान्य अवधारणा का प्रतिनिधित्व किया था:

+0

वेब विकास के भीतर लूप की समानताओं पर कुडोस। –

1

अनुप्रयोगों और कुछ हद तक खेलों के लिए सॉफ्टवेयर घटना संचालित है। उपयोगकर्ता कीबोर्ड या माउस के साथ "कुछ" करता है और वह ईवेंट शेष सॉफ़्टवेयर को भेजा जाता है।

खेलों में गेम लूप महत्वपूर्ण है क्योंकि स्क्रीन और गेम स्थिति को संसाधित करने पर केंद्रित है। वास्तविक समय के प्रदर्शन की आवश्यकता वाले कई खेलों के साथ। आधुनिक 3 डी ग्राफिक्स एपीआई के साथ स्क्रीन प्रसंस्करण के अधिकांश GPU पर डंप किया जा सकता है। हालांकि गेम स्टेट को मुख्य लूप द्वारा ट्रैक किया जाता है। एक खेल के लिए एक टीम के अधिकांश प्रयास लूप की प्रसंस्करण को बहुत चिकनी बनाने पर केंद्रित है।

आवेदन के लिए आम तौर पर भारी प्रसंस्करण धागे पर पैदा होता है। यह एक जटिल विषय है क्योंकि एक ही डेटा तक पहुंचने की कोशिश कर रहे दो चीजों के आसपास के मुद्दों के कारण। इस विषय पर पूरी किताबें हैं।

अनुप्रयोगों के लिए अनुक्रम UI_Controller को भेजा जाता है (एक्स की तरह, वाई निर्देशांक)

  1. उपयोगकर्ता करता है एक्स, एक्स और संबद्ध जानकारी है।
  2. यूआई निर्णय लेता है कि कौन सा आदेश निष्पादित करना है।
  3. कमांड निष्पादित किया गया है।
  4. मॉडल/डेटा संशोधित किया गया है।
  5. कमांड यूआई के विभिन्न क्षेत्रों को अद्यतन करने के लिए UI_Controller को बताता है।
  6. UI_Controller UI को दोबारा हटा देता है।
  7. कमांड रिटर्न देता है।
  8. एप्लिकेशन अगली घटना के लिए इंतजार कर रहा है।

इसके कई प्रकार हैं। मॉडल श्रोताओं को डेटा में बदलावों की प्रतीक्षा करने की अनुमति दे सकता है। जब श्रोता डेटा निष्पादित करता है और यूआई को दोबारा हटा देता है।

1

जहां तक ​​खेल प्रोग्रामिंग चला गया मैं केवल एक शौकिया था, हालांकि यह है कि क्या मैं आमतौर पर किया है। इस दृश्य वस्तु से प्राप्त गेम के सभी अलग-अलग प्रमुख खंड। एक दृश्य वास्तव में कुछ भी हो सकता है, इस पर निर्भर करता है कि यह किस प्रकार का खेल है। वैसे भी, दृश्य से व्युत्पन्न प्रत्येक विशिष्ट दृश्य में उस दृश्य के सभी आवश्यक तत्वों को लोड करने की प्रक्रिया थी।

जब गेम दृश्यों को बदलना था, सक्रिय दृश्य के सूचक को एक नए दृश्य पर सेट किया गया था, जो उसके सभी आवश्यक वस्तुओं को लोड करेगा।

जेनेरिक सीन ऑब्जेक्ट में लोड, ड्रा और लॉजिक जैसे वर्चुअल फ़ंक्शंस थे जिन्हें सक्रिय दृश्य पॉइंटर से गेम लूप में विशेष समय कहा जाता था। प्रत्येक विशिष्ट दृश्य में इन तरीकों को लागू करने के अपने तरीके थे।

मुझे नहीं पता कि यह कैसे किया जाना चाहिए या नहीं, लेकिन यह मेरे लिए चीजों के प्रवाह को नियंत्रित करने का एक आसान तरीका था। दृश्य अवधारणा ने कई दृश्यों को संग्रह के रूप में स्टोर करना भी आसान बना दिया। एक बार में एक प्रकार के ढेर में संग्रहीत कई दृश्य पॉइंटर्स के साथ, दृश्यों को रिजर्व में संग्रहीत किया जा सकता है और वापस लौटने पर अपनी पूरी स्थिति को बनाए रखा जा सकता है, या यहां तक ​​कि मंद की तरह चीजें भी कर सकते हैं, लेकिन सक्रिय दृश्य को ओवरले के रूप में आकर्षित करते समय आकर्षित करना जारी रखना प्रकार के।

तो वैसे भी, यदि आप ऐसा करते हैं तो यह एक वेब पेज की तरह नहीं है, लेकिन मुझे लगता है कि अगर आप इसके बारे में सोचते हैं तो यह सही है।

संबंधित मुद्दे