EaselJS Spritesheet和位图ColorFilterMatrix(EaselJS Sp

2019-10-29 17:52发布

我单独加载spritesheets有关使用PreloadJS用JSON文件要求每个精灵。 现在,我想一个的ColorMatrixFilter应用于精灵或Spritesheet。

经过一番研究,我发现从兰尼这个片段http://jsfiddle.net/lannymcnie/NRH5X/其中JSON SpriteSheet定义是JavaScript代码和位图cacheCanvas [bmp.cacheCanvas]参考中用于在SpriteSheet创作。

现在,如果我使用JSON文件来定义SpriteSheet,我无法引用位图cacheCanvas。 这将是很好,如果SpriteSheet类有一个可选的参数附加一个过滤器,这样它会必不可少执行以下操作也支持JSON文件加载:

var bmp = new createjs.Bitmap(<"Image Defined in JSON SpriteSheet file">);
bmp.filters = [new createjs.BlurFilter(10,10,1)];
bmp.cache(0,0,img.width,img.height);

var data2 = new createjs.SpriteSheet({
    "images": [bmp.cacheCanvas], // Note we are using the bitmap's cache
    "frames": {"height": 292, "width": 165},
    "animations": {"run": [0, 25, "run", 2]}
});

所以,这样的事情会的工作:

var spriteSheet = loaderQueue.getResult(spriteSheetId);

var spriteSheetNewColor = spriteSheet.filter(new createjs.BlurFilter(10,10,1))

或者,我可以得到SpriteSheet IMG这样我就可以重新使用上述技术使用过滤器的SpriteSheet?

Answer 1:

可以直接操作images阵列,并且注入一个过滤/高速缓存的图像。 它需要你预载的图片,它们进行过滤,然后替换SpriteSheet图像。 您还可以得到一个complete从当阵列中的所有图像都加载SpriteSheet事件,做的工作有:

// pseudocode 
spritesheet.on("complete", function(e) {
    for (var i=0; i<spritesheet._images.length; i++) {
        // Filter Code Here
        // Then
        spritesheet.images[i] = filteredBitmap.cacheCanvas;
    }
}

如果你使用一个过滤器,改变图像尺寸(如模糊)这种做法可能会导致混乱。 你可以在我的演示,你引用了模糊图像获取,因为这个偏移看到。

它不是一个完美的解决方案,但您的建议是一个非常具体的要求,并不太可能被添加到SpriteSheet。 更好的办法是自己延长SpriteSheet并添加这种行为,也许在_handleImageLoad方法。

希望帮助!



文章来源: EaselJS Spritesheet and Bitmap ColorFilterMatrix