All tutorials

अपना प्रोग्राम जो बनाता है, उसे नाम दें

Beginner 10 min engine

कोई प्रोग्राम सौ ऑब्जेक्ट बना सकता है और उनमें से एक भी Scene Graph में न दिखाए। नाम देना वह क्रिया है जो किसी को दिखने पर मजबूर करती है, और यह स्प्राइट, टेक्स्ट, 3D ऑब्जेक्ट, लाइट और पार्टिकल पर एक जैसा काम करता है।

आप क्या सीखेंगे#

आप एक छोटा BASIC प्रोग्राम लिखेंगे, देखेंगे कि साफ़ काम करने के बावजूद Scene Graph ख़ाली रहता है, और फिर हर ऑब्जेक्ट को नाम देकर उसे दिखने पर मजबूर करेंगे। आख़िर में आप जान जाएंगे कि ट्री किसी प्रोग्राम की बनाई ज़्यादातर चीज़ों को क्यों छुपाता है, और आप यह कैसे चुनें कि वह क्या दिखाए।

शुरू करने से पहले#

  • Engine एक समर्थित मॉड्यूल है। Inkwell, Vectra और PDF Studio वे तीन मॉड्यूल हैं जो मुफ़्त हैं।
  • किसी पिछले ट्यूटोरियल की ज़रूरत नहीं। नीचे दिया गया सब कुछ एक ही स्क्रिप्ट में है।
  • Scene Graph पैनल को व्यूपोर्ट के बग़ल में खुला रखें। यही इस अभ्यास का मुद्दा है।

चरण#

  1. Engine खोलें, एक खाली सीन शुरू करें, और स्क्रिप्ट एडिटर खोलें। इसे पेस्ट करें और Play दबाएं:

    image = LoadImage("hero.png")
    sprite = CreateSprite(image)
    SpritePosition(sprite, 100.0, 120.0)
    CreatePointLight(1, 0.0, 5.0, 0.0, 10.0, 255, 255, 255)
    DO
      Sync()
    LOOP
    
  2. Scene Graph को देखें। स्प्राइट स्क्रीन पर है, लाइट जल रही है, और ट्री कुछ नहीं दिखाता। यह कोई बग़ नहीं है, और यही पूरा सबक है।

    टिप: पैनल बिना नाम वाले ऑब्जेक्ट की एक गिनती दिखाता है। वह संख्या आपके प्रोग्राम का वह आउटपुट है जिसे ट्री ने जान-बूझकर सूची में नहीं रखा।

  3. स्प्राइट को नाम दें। SpritePosition के बाद एक लाइन जोड़ें, और फिर से Play दबाएं:

    SpriteName(sprite, "player")
    

    player ट्री में दिखने लगता है। स्क्रीन पर और कुछ नहीं बदला: नाम देने से कुछ बनता, हिलता या ड्रॉ नहीं होता। यह सिर्फ़ प्रकाशित करता है।

  4. लाइट को भी नाम दें, उसी कमांड से जो इस विचार के साथ आया:

    LightName(1, "sun")
    

    अब दो एंट्री हैं। किसी एक पर क्लिक करें: इंस्पेक्टर उसके साथ चला जाता है, ठीक वैसे ही जैसे किसी ऐसे ऑब्जेक्ट के लिए होता जिसे आपने हाथ से रखा हो।

  5. पार्टिकल जोड़ें और उन्हें नाम दें, ताकि आप देख सकें कि यह नियम सिर्फ़ स्प्राइट के बारे में नहीं है:

    CreateParticles(1, 200.0, 200.0)
    ParticlesName(1, "smoke")
    
  6. अब तीनों नाम वाली लाइनें हटाएं और Play दबाएं। सीन बिल्कुल वैसी ही है, ट्री फिर से ख़ाली है, और बिना नाम वाली गिनती फिर से तीन पर आ गई है।

    चेतावनी: नाम कोई id नहीं है। SpriteName(sprite, "player") उस स्प्राइट को लेबल करता है जिसकी id sprite में है; यह आपको बाद में उस लेबल से उसे ढूंढने नहीं देता। आपका असली हैंडल हमेशा id ही रहता है।

नतीजा#

आप तय कर सकते हैं कि आपका प्रोग्राम क्या दिखाए। एक prop, एक लाइट और एक एमिटर आपके चुने हुए नामों के तहत दिखते हैं; एक असली प्रोग्राम जो सैकड़ों तकनीकी ऑब्जेक्ट बनाता है, वे रास्ते से बाहर रहते हैं।

यह नियम क्यों है#

एक साधारण BASIC प्रोग्राम लगातार ऑब्जेक्ट बनाता है: हर गोली के लिए एक स्प्राइट, हर स्कोर अंक के लिए एक टेक्स्ट, हर टाइल के लिए एक इमेज। इन सबको सूचीबद्ध करने से Scene Graph कुछ ही सेकंड में पढ़ने लायक नहीं रह जाता, और वे तीन ऑब्जेक्ट जिनकी आपको असल में परवाह है, शोर में खो जाते।

इसलिए ट्री न तो सब कुछ दिखाता है और न ही अंदाज़ा लगाकर बाकी को छुपाता है। यह वही दिखाता है जिसे आपने नाम दिया है, और बाकी की गिनती करता है ताकि कुछ भी चुपचाप ग़ायब न हो। यह फ़िल्टर आपका है, इंजन का नहीं।

किन ऑब्जेक्ट को नाम दिया जा सकता है#

कमांडयह किसे नाम देता है
SpriteName(id, name)एक स्प्राइट
TextName(id, name)एक टेक्स्ट ऑब्जेक्ट
ObjectName(id, name)एक 3D ऑब्जेक्ट
LightName(id, name)एक पॉइंट या डायरेक्शनल लाइट
ParticlesName(id, name)एक पार्टिकल एमिटर, 2D या 3D

साउंड, इमेज, मेमब्लॉक और फ़ॉन्ट की Scene Graph में कोई लाइन नहीं होती: ये सीन ऑब्जेक्ट नहीं, संसाधन (resource) हैं, और इन्हें नाम देने से कहीं कुछ नहीं दिखेगा।

आगे क्या करें#

  • बाक़ी डायलेक्ट: the BASIC language
  • हर नाम देने वाली कमांड, उसके पैरामीटर के साथ: the Studio family