2012-01-17 3 views
0

У меня этот скрипт от this tutorial. Я попытался преобразовать его из AS2 в AS3, но кажется, что фильтр смещения применяется только по какой-то причине. После этого, растровое изображение не обновляется ...Почему этот перлиннойный фильтр смещения не обновляется?

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 Handler. Также 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 в вашем коде? –

+0

Вы читали комментарии перед кодом? Я объяснил, что такое waterImage. В моем коде была ошибка. Я сделал изменения, чтобы исправить это. извините за путаницу. – ganaraj

0

Это

this.addEventListener("enterFrame", perlin);

неверен.

Actionscript 3 не использует "enterFrame" как AS2 делает. Линия вы ищете это:

this.addEventListener(Event.ENTER_FRAME, perlin);

Вам нужно будет импортировать собственный класс, flash.events.Event, для этого, чтобы работать должным образом. Кроме того, это сценарий фрейма или он является частью определения класса документа? Убедитесь, что вы правильно пишете свой код, в зависимости от того, где вы его разместили.

+0

Это неправда. «enterFrame» работает отлично. –

Смежные вопросы