1
我想在我的畫布上創建圖像失真效果,但似乎沒有任何事情發生。這裏是我的代碼:翻譯正弦波在畫布上的像素
self.drawScreen = function (abilityAnimator, elapsed) {
if (!self.initialized) {
self.initialized = true;
self.rawData = abilityAnimator.context.getImageData(self.targetX, self.targetY, self.width, self.height);
self.initialImgData = self.rawData.data;
}
abilityAnimator.drawBackground();
self.rawData = abilityAnimator.context.getImageData(self.targetX, self.targetY, self.width, self.height);
var imgData = self.rawData.data, rootIndex, translationIndex, newX;
for (var y = 0; y < self.height; y++) {
for (var x = 0; x < self.width; x++) {
rootIndex = (y * self.height + x) * 4;
newX = Math.ceil(self.amplitude * Math.sin(self.frequency * (y + elapsed)));
translationIndex = (y * self.width + newX) * 4;
imgData[translationIndex + 0] = self.initialImgData[rootIndex + 0];
imgData[translationIndex + 1] = self.initialImgData[rootIndex + 1];
imgData[translationIndex + 2] = self.initialImgData[rootIndex + 2];
imgData[translationIndex + 3] = self.initialImgData[rootIndex + 3];
}
}
abilityAnimator.context.putImageData(self.rawData, self.targetX, self.targetY);
};
abilityAnimator
是我的畫布對象的包裝:
abilityAnimator.context = //canvas.context
abilityAnimator.drawBackground = function(){
this.canvas.width = this.canvas.width;
}
elapsed
僅僅是因爲動畫開始的毫秒數(過去總是< = 2000) 我的會員變量具有以下值:
self.width = 125;
self.height = 125;
self.frequency = 0.5;
self.amplitude = self.width/4;
self.targetX = //arbitrary value within canvas
self.targetY = //arbitrary value within canvas
我可以很容易地將圖像翻譯到右側,因此l因爲沒有正弦功能,但是,引入這些行:
newX = Math.ceil(self.amplitude * Math.sin(self.frequency * (y + elapsed)));
translationIndex = (y * self.width + newX) * 4;
根本不會導致任何呈現。翻譯指標看起來並不是很奇怪,正弦函數的本質應該保證偏移不大於125/4像素。
此工具非常有用,感謝您的參考! – jokulmorder
@jokulmorder:我很高興如果這個我做的jsbin可以幫助你爲你的效果決定正確的值。如果你有一個在線版本的圖像扭曲效果,請不要猶豫,在這裏發帖! – GameAlchemist