2012-01-17 44 views
0

我從this tutorial得到了這個腳本。我試圖將其從AS2轉換爲AS3,但似乎由於某種原因,位移過濾器僅應用一次。在那之後,位圖不更新......爲什麼這個perlinnoise位移過濾器不更新?

var myBitmap:BitmapData = new BitmapData(1000,600,false,0); 
    var pt = new Point(0,0); 
    var mpoint = new Point(0,0); 
    var myDispl = new DisplacementMapFilter(myBitmap, mpoint,1,2,10,30); 
    var myList = new Array(); 
    myList.push(myDispl); 
    water_mc.filters = myList; 
    var i = 1; 
    this.addEventListener("enterFrame", perlin); 

    function perlin(evt) 
    { 
     var filterList = water_mc.filters; 
     var offset = new Array(); 
     offset[1] = new Object(); 
     offset[1].x = i * 15; 
     offset[1].y = i/8 * 15; 
     filterList.mapBitmap = myBitmap; 
     myBitmap.perlinNoise(45,5,3,50,true,false, 7,true,offset); 

     water_mc.filters = filterList; 
     i++; 
    } 

回答

1

你不需要因爲你沒有做在ENTER_FRAME處理過濾器的任何更改應用過濾器每次。 DisplacementMapFilter也可以直接應用到你的動畫片段。我已經對您粘貼的代碼進行了一些代碼更改。

//waterImage is a Bitmap Object. If you embed the object it will be a bitmap so no issues 
// typecast it if necessary. If you use a loader to load your image, then you can get the bitmap 
// using loader.content after the loader has done loading. 
var mpoint = new Point(0,0); 
var myDispl = new DisplacementMapFilter(null, mpoint,1,2,10,30); 
waterImage.filters = [myDispl]; 
var i = 1; 
this.addEventListener("enterFrame", perlin); 

function perlin(evt) 
{ 
    waterImage.bitmapData.perlinNoise(45,5,3,50,true,false, 7,true,[i*15,(i/8)*15]); 
    i++; 
} 
+0

這似乎不起作用,或者我仍然遺漏了一些東西......可以顯示完整的代碼嗎?代碼中的waterImage和myBitmap究竟是什麼? – 2012-01-17 18:36:28

+0

你讀過代碼之前的評論嗎?我已經解釋了waterImage是什麼。 我的代碼早期出現錯誤。我已經做了修改來解決這個問題。對困惑感到抱歉。 – ganaraj 2012-01-18 15:32:50

0

this.addEventListener("enterFrame", perlin);

不正確。

Actionscript 3不使用"enterFrame"像AS2那樣。你要找的線路是這樣的:

this.addEventListener(Event.ENTER_FRAME, perlin);

您需要導入正確的類,flash.events.Event,使其正常工作。另外,這是一個框架腳本,還是它是文檔類定義的一部分?請確保您正確編寫代碼,具體取決於您放置的位置。

+0

這是不正確的。 「enterFrame」工作得很好。 – 2012-01-18 11:53:22

相關問題