почему этот фильтр смещения perlinnoise не обновляется? - PullRequest
0 голосов
/ 17 января 2012

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

Ответы [ 2 ]

1 голос
/ 17 января 2012

Вам не нужно применять фильтр каждый раз, поскольку вы не вносите никаких изменений в фильтр в обработчике 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 голосов
/ 18 января 2012

Это

this.addEventListener("enterFrame", perlin );

неверно.

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

this.addEventListener(Event.ENTER_FRAME, perlin);

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

...