खोज…


बिटमैप डेटा में डिस्प्ले ऑब्जेक्ट ड्रा करें

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

function makeBitmapCopy(displayObj:IBitmapDrawable, transparent:Boolean = false, bgColor:uint = 0x00000000, smooth:Boolean = true):Bitmap {

    //create an empty bitmap data that matches the width and height of the object you wish to draw
    var bmd:BitmapData = new BitmapData(displayObj.width, displayObj.height, transparent, bgColor);
            
    //draw the object to the bitmap data
    bmd.draw(displayObj, null, null, null, null, smooth);
            
    //assign that bitmap data to a bitmap object
    var bmp:Bitmap = new Bitmap(bmd, "auto", smooth);
            
    return bmp;
}

उपयोग:

var txt:TextField = new TextField();
txt.text = "Hello There";

var bitmap:Bitmap = makeBitmapCopy(txt, true); //second param true to keep transparency
addChild(bitmap);

पंजीकरण बिंदु के किसी भी निर्देशांक के साथ एक प्रदर्शन वस्तु बनाएं

    public function drawDisplayObjectUsingBounds(source:DisplayObject):BitmapData {
        var bitmapData:BitmapData;//declare a BitmapData
        var bounds:Rectangle = source.getBounds(source);//get the source object actual size
        //round bounds to integer pixel values (to aviod 1px stripes left off)
        bounds = new Rectangle(Math.floor(bounds.x), Math.floor(bounds.y), Math.ceil(bounds.width), Math.ceil(bounds.height));

        //to avoid Invalid BitmapData error which occures if width or height is 0
        //(ArgumentError: Error #2015)
        if((bounds.width>0) && (bounds.height>0)){
            //create a BitmapData
            bitmapData = new BitmapData(bounds.width, bounds.height, true, 0x00000000);                
            var matrix:Matrix = new Matrix();//create a transform matrix
            //translate if to fit the upper-left corner of the source
            matrix.translate(-bounds.x, -bounds.y);
            bitmapData.draw(source, matrix);//draw the source
            return bitmapData;//return the result (exit point)
        }
        //if no result is created - return an empty BitmapData
        return new BitmapData(1, 1, true, 0x00000000);
    }

एक साइड नोट: getBounds() लिए वैध वैल्यू वापस करने के लिए ऑब्जेक्ट को कम से कम एक बार स्टेज एक्सेस करना होगा, अन्यथा मान फर्जी हैं। एक कोड जोड़ा जा सकता है यह सुनिश्चित करने के लिए कि पारित source में चरण है, और यदि नहीं, तो इसे चरण में जोड़ा जा सकता है फिर हटा दिया गया।

एक स्प्राइट शीट को एनिमेटेड करना

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

स्प्राइट शीट को चेतन करने के लिए, दो तकनीकों का उपयोग किया जा सकता है। सबसे पहले, आप उपयोग कर सकते हैं BitmapData.copyPixels() अपने स्प्राइट शीट की एक निश्चित क्षेत्र कॉपी करने के लिए एक से प्रदर्शित करने के लिए Bitmap , एक एनिमेटेड चरित्र का निर्माण किया। यह दृष्टिकोण बेहतर है यदि आप एकल प्रदर्शित Bitmap उपयोग करते हैं जो पूरी तस्वीर को होस्ट करता है।

var spriteSheet:BitmapData;
var frames:Vector.<Rectangle>; // regions of spriteSheet that represent frames
function displayFrameAt(frame:int,buffer:BitmapData,position:Point):void {
    buffer.copyPixels(spriteSheet,frames[frame],position,null,null,true);
}

दूसरी तकनीक का उपयोग किया जा सकता है यदि आपके पास प्रदर्शन सूची पर बहुत सारे Sprite एस या Bitmap एस हैं, और वे समान स्प्राइट शीट साझा करते हैं। यहां, लक्ष्य बफर अब एक एकल ऑब्जेक्ट नहीं है, लेकिन प्रत्येक ऑब्जेक्ट का अपना बफर है, इसलिए उचित रणनीति बिटमैप्स की bitmapData संपत्ति में हेरफेर करना है। हालांकि, ऐसा करने से पहले, स्प्राइट शीट को अलग-अलग फ्रेम में काट दिया जाना चाहिए।

public class Stuff extends Bitmap {
    static var spriteSheet:Vector.<BitmapData>;
    function displayFrame(frame:int) {
        this.bitmapData=spriteSheet[frame]; 
    }
    // ...
}


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow