2009-04-28 13 views
7

के भरने वाले रंग को बदलना मैं पूछना चाहता हूं कि मंच पर केवल एक उदाहरण के रंग को कैसे भरना है - मैं इसे कलरट्रांसफॉर्म ऑब्जेक्ट का उपयोग करके कर सकता हूं, लेकिन यह पूरे उदाहरण का रंग बदलता है, न केवल भरने के लिए । मैं केवल भरने का रंग बदलना चाहता हूं, न कि स्ट्रोक रंग। क्या कोई मेरी मदद कर सकता है?मूवीक्लिप एक्शनस्क्रिप्ट 3

function paint(){ 
    var myColorTransform:ColorTransform = new ColorTransform(); 

    myColorTransform.color = someColorNumber; 

    coloredObject.transform.colorTransform = myColorTransform; 

} 

उत्तर

5

यह कार्रवाई स्क्रिप्ट के रूप में निर्धारित करने के लिए एक स्ट्रोक है क्या का कोई रास्ता नहीं है और एक भरने क्या है एक बार आप एक आकार तैयार किया है किया जाना नहीं कर सकते:

इस

मेरी कोड है।

आपके पास कुछ विकल्प हैं।

अलग-अलग फिल्म क्लिप में अपने भरने और स्ट्रोक को अलग करें और रंग बदलने के लिए केवल भरने पर लागू करें।

या

यदि यह एक साधारण आकार है, का उपयोग कर ग्राफिक्स वस्तु आकर्षित जहां रंग और स्ट्रोक रंग भरने निर्दिष्ट कर सकते हैं।

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

+1

हाँ, मुझे पहले समाधान, थेंक्स पहले से ही पता चला है;) – Dungeo

2

यदि आप एफपी 10 को लक्षित कर रहे हैं, और आप रंगीन ट्रांसफॉर्म के साथ जो कुछ भी कोशिश करते हैं, तो आप एक साधारण फ़िल्टर चाहते हैं, तो आप रंगों के 2 तर्क (स्रोत के लिए एक, गंतव्य के लिए एक) लेने के लिए पिक्सेलब्लेंडर कर्नेल लिख सकते हैं, पिक्सेल से मेल खाते हैं स्रोत रंग, और गंतव्य के लिए उन्हें स्वैप; कुछ इस तरह:

//I release this under the MIT License. Use it to your heart's content. 

<languageVersion : 1.0;> 

kernel ReplaceColor 
< namespace : "PIPEEP"; 
    vendor : "PiPeep"; 
    version : 1; 
    description : "Replace color"; 
> 
{ 
    input image4 src; 
    output pixel4 dst; 

    parameter pixel4 sColor 
    < 
     minValue:pixel4(0.); 
     maxValue:pixel4(255.); 
    >; 
    parameter pixel4 dColor; 
    parameter float tolerance; 

    void 
    evaluatePixel() 
    { 
     dst = sampleNearest(src,outCoord()); 
     pixel4 sColorAdjusted = abs((sColor/pixel4(255.)) - dst); 
     if(sColorAdjusted.r < tolerance && sColorAdjusted.g < tolerance && sColorAdjusted.b < tolerance && sColorAdjusted.a < tolerance) { 
      dst = dColor; 
     } 
    } 
} 

याद क्यों वह PixelBlender आईडीई नफरत करता है

संपादित करें: याद रखें कि यह विरोधी aliasing के साथ अच्छी तरह से नहीं खेलेंगे, लेकिन अगर आप stage.quality उपयोग कर रहे हैं = " कम ", इससे कोई फर्क नहीं पड़ता।

AS3 में उपयोग के लिए इसे जोड़ने के लिए, इस (, http://scriptplayground.com/tutorials/as/Flash-CS4-and-Pixel-Bender-Overview/ से चोरी हो ताकि आप कोड की कुछ लाइनें बदलने के लिए की आवश्यकता होगी) की कोशिश:

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

var loader:URLLoader; 
var shader:Shader; 
var shaderFilter:ShaderFilter; 
var image:MovieClip; 
var timer:Timer; 
var timerInt:uint = 40; 

कोड में अगला कदम चरण के लिए छवि को लोड करने, कि आप पिछले चरणों में जोड़ा है।

image = new SampleImage(); image.y = 
20; image.x = 25; 

addChild(image); 

पहले दो तरीकों PBJ फ़ाइल लोड और फिल्टर निर्माण आरंभ प्रक्रिया के लिए बनाया जाना जाता है

function startEffect() { loader = new 
URLLoader(); loader.dataFormat = 
URLLoaderDataFormat.BINARY; 
    loader.addEventListener(Event.COMPLETE, 
loadComplete); loader.load(new 
URLRequest("sample.pbj")); } 



function loadComplete(e:Event):void { 
    shader = new Shader(loader.data); 
    initFilter(); } 

अगले समारोह initFilter() एक बार PBJ फ़ाइल कहा जाता है सफलतापूर्वक है लोड किया गया, इसलिए फ़िल्टर बनाया जा सकता है। यह फ़िल्टर छवि के आर, जी, बी रंग मान सेट करता है, जो अनिवार्य रूप से छवि से विस्तार को उड़ाता है। "shader.data.red.value" के लिए उदाहरण पिक्सेल Bender कोड कि शुरुआत में लिखा गया था, यदि आप उस कोड एक "पैरामीटर नाव लाल" जो लाल के स्तर सेट करने के लिए नाव चर रहा है है नोटिस संदर्भित कर रहा है। इस मामले में मान 20 पर सेट किया जा रहा है। इस प्रक्रिया को अन्य 2 रंगों के लिए दोहराया गया है, और उसके बाद छवि उदाहरण में पास किया गया है।

इस समारोह के अंतिम भाग टाइमर है कि इसके सामान्य नज़र

function initFilter() { 
    shader.data.red.value = [20]; 
    shader.data.green.value = [20]; 
    shader.data.blue.value = [20]; 
    shaderFilter = new 
ShaderFilter(shader);  image.filters = 
[shaderFilter]; 



    timer = new Timer(timerInt, 0); 
    timer.addEventListener(TimerEvent.TIMER, 
timerHit); timer.start(); } 

अंतिम समारोह फिल्टर लागू करने की प्रक्रिया दोहराता करने के लिए छवि रिटर्न जब तक इस फिल्टर लागू करने के लिए चलेंगे सेट , लेकिन पहले वर्तमान फ़िल्टर मानों को पकड़ता है और प्रत्येक पास पर मान से 0.1 घटा देता है। यह प्रक्रिया धीरे-धीरे छवि से फिल्टर तीव्रता को तक हटा देती है, यह पूरी तरह से समाप्त हो जाती है। यह timerHit() समारोह टाइमर कि initFilter() समारोह में बनाया गया था से कहा जाता है।

function timerHit(e:TimerEvent):void 
{ 
    if(shader.data.red.value == 1) 
    { 
     timer.stop(); 
     return; 
    } 

    var r:uint = shader.data.red.value - 0.1; 
    var g:uint = shader.data.green.value - 0.1; 
    var b:uint = shader.data.blue.value - 0.1; 

    shader.data.red.value =  [r]; 
    shader.data.green.value = [g]; 
    shader.data.blue.value = [b]; 
    shaderFilter = new ShaderFilter(shader); 
    image.filters = [shaderFilter]; 
} 

कोड में अंतिम चरण, प्रक्रिया है, जो इस आवेदन में startEffect() समारोह बुला द्वारा किया जाता है शुरू करने के लिए है ताकि है हम क्या करेंगे

startEffect();

अपनी आंखें खून बहने के लिए खेद है! मुझे लगता है कि यह अभी तक मेरा सबसे लंबा जवाब है!

5

मैं जानता हूँ कि इस खेल के लिए थोड़ी देर हो चुकी है, लेकिन मैं इस एक ही समस्या आ गया था और यह थोड़ा अलग तय की। यह किसी भी मदद की नहीं हो सकती है क्योंकि यह केवल सीमित परिस्थितियों में ही काम करेगी, लेकिन मैंने अपने आकार को सफेद & से भरे काले रंग से भरना शुरू कर दिया। इस तरह आप काले रंग की सीमा को बरकरार रखने के लिए सफेद रंग को अपने वांछित रंग में फीका करने के लिए आरजीबी गुणक के साथ एक रंग परिवर्तन लागू कर सकते हैं। तो अपने वस्तु लाल (काले बॉर्डर के साथ) बनाने के लिए उपयोग करें:

function paint() { 
    shape.transform.colorTransform = new ColorTransform(1, 0, 0); 
} 

या स्टैक ओवरफ़्लो नारंगी (अभी भी काले बॉर्डर के साथ) के लिए:

function paint() { 
    shape.transform.colorTransform = new ColorTransform(0.996, 0.478, 0.082); 
} 

* यह केवल यदि आप सिर्फ एक चाहते काम करेंगे एक काला सीमा के साथ एकल रंग।

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