ActionScript 3
प्रदर्शन वस्तुओं के साथ काम करना
खोज…
वाक्य - विन्यास
-
addChild(child)
- इस ऑब्जेक्ट के चाइल्ड ट्री में सबसे ऊपरी तत्व के रूप में एक नया आइटम जोड़ता है। -
addChildAt(child, index)
- एक निर्दिष्ट स्थान पर इस ऑब्जेक्ट के चाइल्ड ट्री में एक नया आइटम जोड़ता है। सबसे नीचे के आइटम में 0 का सूचकांक है। -
getChildAt(index)
- दिए गए इंडेक्स के साथ एक बच्चा देता है। -
getChildIndex(child)
इस ऑब्जेक्ट के प्रत्यक्ष बच्चे का सूचकांक लौटाता है। अन्यथा एक अपवाद फेंक दिया जाता है। -
removeChild(child)
- इस ऑब्जेक्ट के चाइल्ड ट्री से निर्दिष्ट प्रत्यक्ष बच्चे को हटा देता है। अपवाद फेंकता अगर इसकी आपूर्ति बच्चे के माता पिता के बराबर नहीं हैthis
। -
removeChildAt(index)
- संदर्भ के बजाय इंडेक्स द्वारा चयनित एक बच्चे को निकालता है। चाइल्ड ट्री व्यापक नहीं है, तो अपवाद फेंकता है। -
removeChildren(beginIndex:int = 0, endIndex:int = 0x7fffffff))
- फ़्लैश प्लेयर 11 में जोड़ा गया है, इंडेक्स रेंज द्वारा बच्चों का एक सबसेट निकालता है, या सभी बच्चों को अगर कोई पैरामीटर नहीं कहा जाता है। -
setChildIndex(child,index)
- जारी किए गए स्थान पर कब्जा करने के लिए बीच में सभी बच्चों को स्थानांतरित करते हुए, बच्चे के सूचकांक को नए मूल्य में बदल देता है। -
swapChildren(child1,child2)
- प्रदर्शन सूची में दो बच्चों के पदों को स्वैप करता है, अन्य बच्चों के पदों को प्रभावित नहीं करता है। -
swapChildrenAt(index1,index2)
- बच्चों को उनके अनुक्रमणिका द्वारा स्थित स्वैप करता है।
टिप्पणियों
प्रदर्शन सूची वास्तव में एक पेड़ है, और गहराई से पहले एल्गोरिथ्म के साथ कल्पना की जाती है। पहले सूचीबद्ध किसी भी वस्तु को पहले प्रदर्शित किया जाएगा, और बाद में सूचीबद्ध वस्तुओं द्वारा अस्पष्ट किया जा सकता है। एक पेड़ के खिलाफ इस्तेमाल की जा सकने वाली सभी तकनीकों को प्रदर्शन सूची के साथ काम करने के लिए लागू किया जा सकता है।
प्रदर्शन सूची का परिचय
AS3 में, प्रदर्शन संपत्ति तब तक दिखाई नहीं देती है जब तक उन्हें प्रदर्शन सूची में नहीं जोड़ा जाता है।
AIR / फ्लैश रनटाइम में एक पदानुक्रमित प्रदर्शन संरचना होती है (माता-पिता के बच्चे का संबंध जहां बच्चों के अपने बच्चे हो सकते हैं), stage
शीर्ष स्तर का माता-पिता होने के साथ।
प्रदर्शन सूची में कुछ जोड़ने के लिए, आप addChild
या addChildAt
उपयोग करते हैं। यहाँ एक वृत्त खींचने और इसे प्रदर्शन सूची में जोड़ने का एक मूल उदाहरण है:
var myCircle:Shape = new Shape();
myCircle.graphics.beginFill(0xFF0000); //red
myCircle.graphics.drawCircle(25, 25, 50);
myCircle.graphics.endFill();
this.addChild(myCircle); //add the circle as a child of `this`
ऊपर दिए गए उदाहरण में ऑब्जेक्ट को देखने के लिए, this
(कोड का संदर्भ) भी प्रदर्शन सूची में होना चाहिए, साथ ही किसी भी माता-पिता के पास भी हो सकता है। AS3 में, stage
सबसे शीर्ष माता-पिता है।
प्रदर्शन वस्तुओं में केवल एक माता-पिता हो सकते हैं। इसलिए यदि किसी बच्चे के पास पहले से ही माता-पिता हैं, और आप इसे किसी अन्य ऑब्जेक्ट में जोड़ते हैं, तो इसे पिछले माता-पिता से निकाल दिया जाएगा।
जेड-ऑर्डर / लेयरिंग
मान लीजिए कि आपने पिछले उदाहरण से कोड को दोहराया है तो आपके पास 3 मंडलियां थीं:
var redCircle:Shape = new Shape();
redCircle.graphics.beginFill(0xFF0000); //red
redCircle.graphics.drawCircle(50, 50, 50); //graphics.endFill is not required
var greenCircle:Shape = new Shape();
greenCircle.graphics.beginFill(0x00FF00); //green
greenCircle.graphics.drawCircle(75, 75, 50);
var blueCircle:Shape = new Shape();
blueCircle.graphics.beginFill(0x0000FF); //blue
blueCircle.graphics.drawCircle(100, 100, 50);
this.addChild(redCircle);
this.addChild(greenCircle);
this.addChild(blueCircle);
चूँकि addChild
विधि बच्चे को एक ही माता-पिता में बाकी सब चीज़ों में सबसे ऊपर जोड़ती है, इसलिए आपको यह परिणाम उसी क्रम में प्राप्त वस्तुओं के साथ मिलेगा, जो आप addChild का उपयोग करते हैं:
यदि आप चाहते हैं कि एक बच्चा भाई-बहन के सापेक्ष अलग-अलग हो, तो आप addChildAt
उपयोग कर सकते हैं। addChildAt
साथ, आप एक अन्य पैरामीटर में पास होते हैं जो इंडेक्स (z- ऑर्डर) को इंगित करता है कि बच्चा किस स्थान पर होना चाहिए। 0
सबसे नीचे की स्थिति / परत होना।
this.addChild(redCircle);
this.addChild(greenCircle);
this.addChildAt(blueCircle,0); //This will add the blue circle at the bottom
अब नीले घेरे के तहत यह भाई बहन है। यदि बाद में, आप एक बच्चे के सूचकांक को बदलना चाहते हैं, तो आप setChildIndex
विधि (बच्चे के माता-पिता पर) का उपयोग कर सकते हैं।
this.setChildIndex(redCircle, this.numChildren - 1); //since z-index is 0 based, the top most position is amount of children less 1.
यह लाल सर्कल को पुनर्व्यवस्थित करेगा इसलिए यह सब कुछ के ऊपर है। ऊपर दिए गए कोड के समान सटीक परिणाम उत्पन्न करता है this.addChild(redCircle)
।
प्रदर्शन वस्तुओं को हटाना
ऑब्जेक्ट को निकालने के लिए, आपके पास removeChild
और removeChildAt
तरीके हैं और साथ ही removeChildren
मेथड।
removeChild(redCircle); //this will take redCircle off the display list
removeChildAt(0); //this will take the bottom most object off the display list
removeChildren(); //this will clear all children from the display list
removeChildren(1); //this would remove all children except the bottom most
removeChildren(1,3); //this would remove the children at indexes 1, 2 & 3
आयोजन
जब एक बच्चे को प्रदर्शन सूची में जोड़ा जाता है, तो उस बच्चे पर कुछ घटनाओं को निकाल दिया जाता है।
-
Event.ADDED
-
Event.ADDED_TO_STAGE
इसके विपरीत, हटाने की घटनाएं भी हैं:
-
Event.REMOVED
-
Event.REMOVED_FROM_STAGE
एडोब एनिमेट / फ्लैश प्रोफेशनल
FlashProfessional / Adobe Animate टाइमलाइन के साथ काम करते समय, टाइमलाइन में कुछ जोड़ने से डिस्प्ले लिस्ट की बारीकियां अपने आप हो जाती हैं। उन्होंने टाइमलाइन द्वारा स्वचालित रूप से प्रदर्शन सूची में जोड़ा और हटा दिया।
हालाँकि, यह ध्यान रखना अच्छा है कि:
यदि आप कोड के माध्यम से टाइमलाइन (addChild / setChildIndex का उपयोग करके) बनाए गए ऑब्जेक्ट के पेरेंटेज में हेरफेर करते हैं, तो उस बच्चे को अब टाइमलाइन द्वारा स्वचालित रूप से हटाया नहीं जाएगा और उसे कोड के माध्यम से निकालना होगा।
लेयरिंग
ऐसे हालात हो सकते हैं जब आप तय करते हैं कि प्रदर्शन वस्तुओं का एक सेट हमेशा वस्तुओं के दूसरे सेट से ऊपर होना चाहिए, उदाहरण के लिए, सिर पर तीर, किसी चीज पर विस्फोट, जो बस विस्फोट हो गया, आदि। जितना संभव हो उतना सरल प्रदर्शन करने के लिए, आपको नामित करने की आवश्यकता है और Sprite
एस का एक सेट बनाएं, उन्हें नीचे से ऊपर तक व्यवस्थित करें, फिर बस "नीचे" सेट की वस्तुओं के लिए उपयोग की गई परत के ऊपर "ऊपर" सेट की सभी वस्तुओं को जोड़ें।
var monsters:Vector.<Monster>;
var bullets:Vector.<Bullet>; // desired: bullets strictly above monsters
var monsterLayer:Sprite=new Sprite();
var bulletLayer:Sprite=new Sprite();
addChild(monsterLayer);
addChild(bulletLayer);
फिर, जब भी आप प्रदर्शन सूची में एक Monster
जोड़ते हैं, तो इसे monsterLayer
जोड़ें, और जब भी आप एक Bullet
जोड़ें, वांछित प्रभाव को प्राप्त करने के लिए bulletLayer
जोड़ें।
प्रदर्शन सूची से सभी ऑब्जेक्ट निकालें
यदि फ़्लैश प्लेयर 11+ को लक्षित किया जाता है, तो सभी बच्चों को हटाने का सबसे अच्छा तरीका बिल्ट-इन रिमूव गिल्ड्रेन विधि है:
removeChildren(); //a start and end index can be passed
विरासत अनुप्रयोगों के लिए, एक लूप के साथ पूरा किया जा सकता है:
while (numChildren > 0) {
removeChildAt(0);
}
फ़्रेम से मैन्युअल सामग्री स्विचिंग में स्थानांतरित करना
एक फ्लैश डेवलपर पर शुरुआती फ्रेम का उपयोग करता है, क्योंकि वे फ़्लैश प्लेयर में मूल रूप से उपलब्ध हैं, अपने आवेदन के विभिन्न स्क्रीन को होस्ट करने के लिए (सबसे अधिक बार यह एक खेल है)। आखिरकार वे एक मुद्दे पर ठोकर खा सकते हैं कि कुछ गलत हो जाता है क्योंकि उन्होंने फ़्रेम का उपयोग किया है, और इससे उत्पन्न होने वाली कठिनाइयों को अनदेखा किया है, और दोनों अपने फ्रेम संरचना को बनाए रखने के तरीकों की तलाश करते हैं, लेकिन इसकी जटिलताओं के साथ फ़्रेम का उपयोग करने की बाधा को भी दूर करते हैं। समाधान का उपयोग करने के लिए है Sprite
के रूप में वंशज कक्षाएं, या निर्यात फ्रेम MovieClip
एक भी फ्रेम (उन लोगों के लिए एडोब फ्लैश सीएस में है कि डिजाइन) के साथ है, और मैन्युअल रूप से सामग्री स्विच addChild()
और removeChild()
।
प्रबंधक वर्ग के पास अपनी सभी बाल फ्रेम कक्षाएं तैयार होनी चाहिए, और जब भी कोई संक्रमण कहा जाता है, तो इसके समान एक फ़ंक्शन का उपयोग किया जा सकता है:
var frames:Vector.<DisplayObject>; // this holds instances to ALL children
var currentFrame_alt:int; // current frame. Can't use the property
function changeFrame(frame:int):void {
removeChild(frames[currentFrame_alt]);
addChild(frames[frame]);
currentFrame_alt=frame;
}
सभी बच्चों को दोनों प्रेषण और साथ घटनाओं को सुन सकते हैं Event.ADDED_TO_STAGE
एक प्रवेश बिंदु जो कुछ के लिए बाद क्या होता है के रूप में इस्तेमाल gotoAndStop()
कि फ्रेम लक्ष्यीकरण, और किसी भी बाहर जाने वाले बदलाव के तार के आधार पर की घटनाओं, जिसमें सुनी जा रही हैं के रूप में कोडित किया जा सकता है Main
वर्ग, जो तब संक्रमण करता है।
frames[0].addEventListener("startGame",startGame); // assuming frame 0 is a "Play" button
function startGame(e:Event):void {
changeFrame(1); // switch to frame 1 - will display frames[1]
}
बेशक, स्ट्रिंग्स के सेट को पूर्वनिर्धारित किया जाना चाहिए, उदाहरण के लिए, इंट्रो स्क्रीन में खेल शुरू करने के लिए दो बटन हो सकते हैं, उदाहरण के लिए "गेम शुरू करें" और "म्यूट स्टार्ट करें", और बटन को अलग-अलग घटनाओं को भेजना चाहिए, जिसे तब नियंत्रित किया जाएगा। प्रबंधक वर्ग में अलग तरह से।
यह पैटर्न जितना आवश्यक हो उतना गहरा जा सकता है। यदि परियोजना के किसी भी फ्रेम में कई फ़्रेमों के साथ एक मूवीक्लिप होता है, तो इसे इस विधि के साथ स्प्राइट में भी डिकॉउंड किया जा सकता है।