почему этот фильтр смещения perlinnoise не обновляется?

я получил этот скрипт из этого руководства. Я попытался преобразовать его из 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++;
    }

person Run CMD    schedule 17.01.2012    source источник


Ответы (2)


Вам не нужно применять фильтр каждый раз, поскольку вы не вносите никаких изменений в фильтр в обработчике 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++;
} 
person ganaraj    schedule 17.01.2012
comment
Кажется, это не работает, или я все еще что-то упускаю... не могли бы вы показать полный код, пожалуйста? Что такое waterImage и myBitmap в вашем коде? - person Run CMD; 17.01.2012
comment
вы читали комментарии перед кодом? Я объяснил, что такое waterImage. Ранее в моем коде была ошибка. Я внес изменения, чтобы исправить это. извините за путаницу. - person ganaraj; 18.01.2012

Этот

this.addEventListener("enterFrame", perlin );

это неверно.

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

this.addEventListener(Event.ENTER_FRAME, perlin);

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

person jedd.ahyoung    schedule 18.01.2012