使颜色变化速度依赖于mouseX
Make color change speed be dependent on mouseX
我有一个瓷砖网格,可以在红色和绿色之间缓慢改变颜色。如何使颜色变化速度依赖于 mouseX,使得小 mouseX 等于更快的颜色变化。
function colorGrid(){
var stepSize = 20;
var green = color(0, 255, 0);
var red = color(255, 0, 0);
for(var x=0;x<25;x++){
for(var y=0;y<25;y++){
var tX = (x*stepSize+frameCount)*0.003;
var tY = (y*stepSize+frameCount)*0.003;
var t = noise(tX, tY);
var c = lerpColor(green, red, t);
fill(c);
noStroke();
rect(x*stepSize,y*stepSize,stepSize,stepSize);
}
}
}
您要更改的是您在噪声中移动的速率 space。现在您使用 frameCount
在 space.
中暂时移动
所以要改变你需要玩的速度frameCount
。一种方法是在 frameCount * 1
(您当前的行为)和 frameCount * X
之间映射 mouseX
,其中 X > 1
.
function colorGrid(){
var stepSize = 20;
var green = color(0, 255, 0);
var red = color(255, 0, 0);
// Creating the factor
const temporalOffsetFactor = map(mouseX, 0, width, 1, 50);
for(var x=0;x<25;x++){
for(var y=0;y<25;y++){
var tX = (x*stepSize+frameCount*temporalOffsetFactor)*0.003; // Using the new factor
var tY = (y*stepSize+frameCount*temporalOffsetFactor)*0.003;
var t = noise(tX, tY);
var c = lerpColor(green, red, t);
fill(c);
noStroke();
rect(x*stepSize,y*stepSize,stepSize,stepSize);
}
}
}
查看实际效果 here
编辑 为避免移动鼠标时地图“跳跃”,一个可能的解决方案是去除 mouseX 以每隔 X 毫秒获取其值(我发现 500 毫秒非常有效出色地)。所以你可以在调用 setup()
之前将它添加到你的代码中
let debouncedMouseX = 1;
setInterval(() => (debouncedMouseX = mouseX), 1000);
并在 const temporalOffsetFactor = map(mouseX, 0, width, 1, 50);
行中将 mouseX
替换为 debouncedMouseX
这可能不理想,但它可以工作。我相应地更新了我的依赖关系。
我有一个瓷砖网格,可以在红色和绿色之间缓慢改变颜色。如何使颜色变化速度依赖于 mouseX,使得小 mouseX 等于更快的颜色变化。
function colorGrid(){
var stepSize = 20;
var green = color(0, 255, 0);
var red = color(255, 0, 0);
for(var x=0;x<25;x++){
for(var y=0;y<25;y++){
var tX = (x*stepSize+frameCount)*0.003;
var tY = (y*stepSize+frameCount)*0.003;
var t = noise(tX, tY);
var c = lerpColor(green, red, t);
fill(c);
noStroke();
rect(x*stepSize,y*stepSize,stepSize,stepSize);
}
}
}
您要更改的是您在噪声中移动的速率 space。现在您使用 frameCount
在 space.
所以要改变你需要玩的速度frameCount
。一种方法是在 frameCount * 1
(您当前的行为)和 frameCount * X
之间映射 mouseX
,其中 X > 1
.
function colorGrid(){
var stepSize = 20;
var green = color(0, 255, 0);
var red = color(255, 0, 0);
// Creating the factor
const temporalOffsetFactor = map(mouseX, 0, width, 1, 50);
for(var x=0;x<25;x++){
for(var y=0;y<25;y++){
var tX = (x*stepSize+frameCount*temporalOffsetFactor)*0.003; // Using the new factor
var tY = (y*stepSize+frameCount*temporalOffsetFactor)*0.003;
var t = noise(tX, tY);
var c = lerpColor(green, red, t);
fill(c);
noStroke();
rect(x*stepSize,y*stepSize,stepSize,stepSize);
}
}
}
查看实际效果 here
编辑 为避免移动鼠标时地图“跳跃”,一个可能的解决方案是去除 mouseX 以每隔 X 毫秒获取其值(我发现 500 毫秒非常有效出色地)。所以你可以在调用 setup()
let debouncedMouseX = 1;
setInterval(() => (debouncedMouseX = mouseX), 1000);
并在 const temporalOffsetFactor = map(mouseX, 0, width, 1, 50);
mouseX
替换为 debouncedMouseX
这可能不理想,但它可以工作。我相应地更新了我的依赖关系。