如果你的目標是FP10,並且你想要一個像ColorTransform一樣簡單的過濾器,你可以編寫一個PixelBlender內核來獲取2個參數的顏色(一個用於源,一個用於目的地),匹配像素源顏色,並交換它們的目的地;是這樣的:
代碼的第一部分是定義一些變量使用稍後的。只有兩個 可能看起來是新的Shader和 ShaderFilter。這些都是新的到Flash Player 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文件是 成功加載,所以過濾器可以創建 。此濾鏡設置圖像的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。該過程緩慢地從圖像中移除濾光片強度,直到 它完全消失。這個函數被, 函數調用,該函數在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();
是的,我已經找到了第一個解決方案,thanx;) – Dungeo 2009-04-28 08:23:11