actionscript 3 - एएस 3: मैं विशिष्ट पिक्सेल/क्षेत्र में ग्राफिक्स कैसे साफ़ कर सकता हूं?




actionscript-3 graphics (2)

मुझे पता है कि आप graphics.clear का उपयोग करते हैं। सभी graphics.clear को साफ करने के लिए क्लीर्रैक्ट करें, लेकिन जो मंच से ग्राफ़िक्स को साफ़ करता है, मैं किसी विशिष्ट पिक्सेल (ग्राफिक्स) में या एक्सआई वैल्यू के बीच ग्राफिक्स को साफ़ करना चाहूंगा मैं यह कैसे करूँ?


ऐसा करने का तरीका mask साथ होगा। अल्फा मुखौटा (दोनों मुखौटा और मुखौटा कैश ए cacheAsBitmap=true ) का उपयोग cacheAsBitmap=true आप भागों को मिटाने के लिए मास्क पर पारदर्शी पिक्सल आकर्षित कर सकते हैं। मूल दृष्टिकोण होगा:

  1. अपने सभी ग्राफिक्स को रखें जो आप एक आम कंटेनर में मुखौटा द्वारा प्रभावी होना चाहते हैं (यदि आप का मतलब है कि सब कुछ कट जाए, तो वे पहले से ही एक सामान्य कंटेनर में हैं: stage या root टाइमलाइन।)

  2. एक बिटमैप डेटा ऑब्जेक्ट ड्राफ्ट करें जिसमें उस क्षेत्र में पारदर्शी "छेद" है जिसे आप मिटाना चाहते हैं। उदाहरण के लिए:

    // fill the stage with a solid rectangle
    var maskBitmapData:BitmapData = new BitmapData(stage.stageWidth, stage.stageHeight, true, 0xff000000);
    // erase part of it by drawing transparent pixels
    maskBitmapData.fillRect(new Rectangle(20, 20, 200, 100), 0);
    
    // create the mask object
    var maskBitmap:Bitmap = new Bitmap(maskBitmapData);
    maskBitmap.cacheAsBitmap = true; // this makes the mask an alpha mask
    addChild(maskBitmap);
  3. कंटेनर की। .mask संपत्ति सेट करें उदाहरण के लिए, संपूर्ण मुख्य समयरेखा को मुखौटा करने के लिए:

    root.cacheAsBitmap = true; // this makes the mask an alpha mask
    root.mask = maskBitmap;

कुछ सवालों के जवाब देने के लिए ओपन स्टैक ओवरफ्लो, अगले हफ्ते के बारे में सोचें कि पनीर में कैसे छेद रखा गया है ... :)

आप अपने छेद ऑब्जेक्ट के blendMode प्रॉपर्टी को cacheAsBitmap साथ संयोजन में BlendMode.ERASE पर भी सेट कर सकते हैं। यह मुखौटे के समान काम करता है, सिवाय आप वास्तव में wholes ड्राइंग करेंगे और उनके बाहर क्षेत्र नहीं। यहाँ एक उदाहरण है:

//make cheese
var cheese:Sprite = new Sprite();
cheese.cacheAsBitmap = true;
stage.addChild(cheese);
cheese.x = cheese.y = 10;

//define holes 
var holes:Shape = new Shape();
holes.blendMode = BlendMode.ERASE;
cheese.addChild(holes);

//draw cheese
var g = cheese.graphics;
g.beginFill(0xFFCC00);
g.drawRect(0,0,200,150);

//**Attack chees with mices.
g = holes.graphics;
for (var i:int = 0; i < 10; i++){
    g.beginFill(0xFF00FF);
    var hx = Math.random()*(cheese.width-7)+7;
    var hy = Math.random()*(cheese.height-7)+7;
    var s = Math.random()*15;
    g.drawCircle(hx, hy, s);
    g.endFill();
}

परिणाम कुछ ऐसा होगा:

संपादित करें:

यह चालू हो जाता है कि आपको cacheAsBitmap का उपयोग करने की आवश्यकता नहीं है यदि आप पेरेंट ऑब्जेक्ट के cacheAsBitmap ब्लेंड मोड सेट करते हैं (डॉक्टर का कहना है कि इसे स्वतः सेट करना चाहिए ...) तो आप cheese.blendMode = BlendMode.LAYER; उपयोग कर सकते हैं। cheese.blendMode = BlendMode.LAYER; cheese.cacheAsBitmap = true; बजाय cheese.cacheAsBitmap = true; । और अगर मैं सही ढंग से याद रखता हूं, मास्क को भी cahceAsBitmap आवश्यकता नहीं होती है, यहां तक ​​कि NORMAL मिश्रण मोड के साथ भी।