2009-04-28 2 views
7

무대에서 인스턴스의 채우기 색만 변경하는 방법 묻고 싶습니다. ColorTransform 객체를 사용하여 수행 할 수 있지만 채우기가 아닌 전체 인스턴스의 색상이 변경됩니다. . 획 색상이 아닌 채우기 색만 변경하고 싶습니다. 아무도 도와 줄 수 있니? 액션 스크립트가 뇌졸중 무엇인지 결정하는 방법이 없습니다 및 채우기은 무엇 당신이 모양을 그려 일단MovieClip 액션 스크립트의 채우기 색상 변경 3

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

    myColorTransform.color = someColorNumber; 

    coloredObject.transform.colorTransform = myColorTransform; 

} 

답변

5

이 이루어 질수 :

내 코드입니다.

몇 가지 옵션이 있습니다.

채우기와 획을 별도의 무비 클립으로 분리하고 채우기에만 적용되도록 색상 변형을 설정하십시오. 당신은 색상과 획 색상을 채우기 지정할 수있는

또는

는 간단한 모양의 경우

는 그래픽 객체를 사용하여 그립니다.

모양이 복잡하기 때문에 첫 번째 옵션이 될 가능성이있는 후드이며 fla에 남겨두면 디자이너가 개발자가 아닌 개발자가 변경할 수 있도록 제어 할 수 있습니다. 그것은 조금 더 많은 일이지만 약간 더 복잡합니다.

+1

네, 이미 첫 번째 해결책을 찾아 냈습니다.;) – Dungeo

2

FP10을 대상으로하고 ColorTransform으로 시도한 것과 같은 간단한 필터가 필요한 경우 PixelBlender 커널을 작성하여 2 가지 색상 인수 (소스와 대상 중 하나)를 취하고 픽셀을 소스 색상을 지정하고 대상 색상으로 바꿉니다. 이 같은 : 그는 PixelBlender IDE를 싫어하는 이유

//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; 
     } 
    } 
} 

는 기억한다

편집 : 당신은 Stage.quality를 사용하는 경우이 앤티 앨리어싱으로 잘 작동하지만,하지 않을 것을 기억 = " 낮은 ", 그것은 중요하지 않습니다.

몇 가지 변수를 정의하는 코드의 첫 부분 사용 :

이가 (당신이 몇 줄의 코드를 변경해야합니다, 그래서 http://scriptplayground.com/tutorials/as/Flash-CS4-and-Pixel-Bender-Overview/에서 도난) 시도, AS3에서 사용을 추가하려면 나중에. 새롭게 보일 수있는 두 개의 은 Shader 및 ShaderFilter입니다. 이는 플래시 플레이어 10에 새로 추가되었으며 Pixel 벤더 필터 데이터 처리를 담당하는 클래스 입니다.

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 파일 일단 라고 다음 함수가 성공적 이고 로드되었으므로 필터를 수 있습니다. 이 필터는 이미지가 이미지에서 본질적으로 불어 오는 이미지의 r, g, b 색상 값을 설정합니다. 은 "shader.data.red.value"에 대한 예는 그 코드가 빨간색의 수준을 설정하는 플로트 변수 인 "매개 변수 플로트 빨간색"가 발견되면, 시작 부분에 기록 된 픽셀 벤더 코드를 참조한다. 이 경우 값은 이 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

나는이 게임에 약간 늦었다 고 알고 있지만, 나는이 같은 문제를 가지고 있었고 약간 다르게 고쳤다. 그것은 제한된 상황에서만 작동하기 때문에 어떤 도움이되지 않을 수도 있습니다 *,하지만 내 모양이 하얀색으로 채워지기 시작했습니다 & 검정색으로 칠한 것입니다. 이렇게하면 RGB 배율로 색상 변환을 적용하여 흰색을 원하는 색으로 페이드 아웃하여 검은 색 테두리를 그대로 유지할 수 있습니다. 그래서 (검은 색 테두리) 개체 빨간색을 만들기 위해 사용 :

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

또는 스택 오버플로 오렌지 (여전히 검은 색 테두리)에 대한

:

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

당신이 단지를 원한다면 * 그것은에만 작동합니다 검은 색 테두리가있는 단일 색상.

관련 문제