p5.js - 实时更新多个滑块的滑块值
p5.js - updating slider value's in real time for multiple sliders
我有一个项目有多个滑块来调整小草图图案。我最初制作了一个按钮,以便在进行更改后更新它们的值,但我想让它 运行 与更改一起使用。
这是我最近尝试显示的值; (它超级混乱,因为我已经尝试了将近 20 多种不同的方法(我通常使用 let 和 const 但 p5.js 有一段时间没有更新所以我认为它可能会影响它),一旦我能得到一些有用的东西我想回去并包括迭代和循环以减轻它)(这里也是新手程序员)
let a = randomNumber(-3, 3), b = randomNumber(-3, 3), c = randomNumber(-3, 3), d = randomNumber(-3, 3), r = randomNumber(0, 255), g = randomNumber(0, 255), z = randomNumber(0, 255), o = 50;
function randomNumber(min, max) {
return Math.random() * (max - min) + min;
}
var aSlider, bSlider, cSlider, dSlider, rSlider, gSlider, zSlider, oSlider;
var sliders = new Array(aSlider, bSlider, cSlider, dSlider, rSlider, gSlider, zSlider, oSlider);
var aLabel, bLabel, cLabel, dLabel, rLabel, gLabel, zLabel, oLabel;
var labels = new Array(aLabel, bLabel, cLabel, dLabel, rLabel, gLabel, zLabel, oLabel);
var x=1, y=1;
// let each_Slider = aSlider, bSlider, cSlider, dSlider, rSlider, gSlider, zSlider, oSlider;
let slider_Value = new Array(a.toFixed(2), b.toFixed(2), c.toFixed(2), d.toFixed(2), r.toFixed(0), g.toFixed(0), z.toFixed(0), o.toFixed(0));
// UI set up
function setup() {
const rSlider = createSlider(0,255,r, 0.01);
const rLabel = createElement('h3', "Red = " + slider_Value[4]);
const gSlider = createSlider(0,255,g, 0.01);
const gLabel = createElement('h3', "Green = " + slider_Value[5]);
const zSlider = createSlider(0,255,z, 0.01);
const zLabel = createElement('h3', "Blue = " + slider_Value[6]);
const oSlider = createSlider(0,100,o, 0.01);
const oLabel = createElement('h3', "Opacity = " + slider_Value[7]);
const aSlider = createSlider(-3,3,a, 0.1);
const aLabel = createElement('h3', slider_Value[0]);
const bSlider = createSlider(-3,3,b,0.1);
const bLabel = createElement('h3', slider_Value[1]);
const cSlider = createSlider(-3,3,c,0.1);
const cLabel = createElement('h3', slider_Value[2]);
const dSlider = createSlider(-3,3,d,0.1);
const dLabel = createElement('h3', slider_Value[3]);
var myButton = createButton("Redraw")
myButton.mousePressed(function() {
a = aSlider.value();
b = bSlider.value();
c = cSlider.value();
d = dSlider.value();
r = rSlider.value();
g = gSlider.value();
z = zSlider.value();
o = oSlider.value();
background(245);
stroke(r, g, z, o);
})
slider_Value;
createCanvas(1000, 1000);
stroke(r, g, z, o);
pixelDensity(1);
}
// Attractor sketching
function draw() {
for(var i = 0; i < 1000; i++) {
var oldX = x;
var oldY = y;
x = sin(a * oldY) - cos(b * oldX);
y = sin(c * oldX) - cos(d * oldY);
var scaledX = map(x, -2, 2, 0, width);
var scaledY = map(y, -2, 2, 0, height);
point(scaledX, scaledY);
}
}
最近一段时间我一直在为 p5.js 苦苦挣扎,它是一个帮助我学习 JS 的非常小的项目,但我似乎无法获得实时更新的值以显示在 input() 上或更改().控制台说它不是函数,即使它们在同一范围内 运行 没有问题。
如果有人有任何想法,我已经被困了一段时间并看了很多教程,但 none 似乎解决了如何处理多个滑块元素。
您可以创建一个函数来创建更新对象中值的滑块。
function randomNumber(min, max) {
return Math.random() * (max - min) + min;
}
let vars = {};
function addSlider(variable, min, max, val, step, text) {
let slider = createSlider(min, max, val, step);
let label = createSpan(text.replace("#", val.toFixed(2)));
createElement("br");
let onInput = () => {
vars[variable] = slider.value();
label.html(text.replace("#", slider.value().toFixed(2)));
background(245);
stroke(vars.r, vars.g, vars.z, vars.o);
};
slider.input(onInput);
vars[variable] = val;
}
// UI set up
function setup() {
addSlider("r", 0, 255, randomNumber(0, 255), 0.01, "Red = #");
addSlider("g", 0, 255, randomNumber(0, 255), 0.01, "Green = #");
addSlider("z", 0, 255, randomNumber(0, 255), 0.01, "Blue = #");
addSlider("o", 0, 100, 50, 0.01, "Opacity = #")
addSlider("a", -3, 3, randomNumber(-3, 3), 0.1, "#");
addSlider("b", -3, 3, randomNumber(-3, 3), 0.1, "#");
addSlider("c", -3, 3, randomNumber(-3, 3), 0.1, "#");
addSlider("d", -3, 3, randomNumber(-3, 3), 0.1, "#");
createCanvas(1000, 1000);
stroke(vars.r, vars.g, vars.z, vars.o);
pixelDensity(1);
}
// Attractor sketching
let x = 1, y = 1;
function draw() {
for(let i = 0; i < 1000; i++) {
let oldX = x;
let oldY = y;
x = sin(vars.a * oldY) - cos(vars.b * oldX);
y = sin(vars.c * oldX) - cos(vars.d * oldY);
let scaledX = map(x, -2, 2, 0, width);
let scaledY = map(y, -2, 2, 0, height);
point(scaledX, scaledY);
}
}
我有一个项目有多个滑块来调整小草图图案。我最初制作了一个按钮,以便在进行更改后更新它们的值,但我想让它 运行 与更改一起使用。
这是我最近尝试显示的值; (它超级混乱,因为我已经尝试了将近 20 多种不同的方法(我通常使用 let 和 const 但 p5.js 有一段时间没有更新所以我认为它可能会影响它),一旦我能得到一些有用的东西我想回去并包括迭代和循环以减轻它)(这里也是新手程序员)
let a = randomNumber(-3, 3), b = randomNumber(-3, 3), c = randomNumber(-3, 3), d = randomNumber(-3, 3), r = randomNumber(0, 255), g = randomNumber(0, 255), z = randomNumber(0, 255), o = 50;
function randomNumber(min, max) {
return Math.random() * (max - min) + min;
}
var aSlider, bSlider, cSlider, dSlider, rSlider, gSlider, zSlider, oSlider;
var sliders = new Array(aSlider, bSlider, cSlider, dSlider, rSlider, gSlider, zSlider, oSlider);
var aLabel, bLabel, cLabel, dLabel, rLabel, gLabel, zLabel, oLabel;
var labels = new Array(aLabel, bLabel, cLabel, dLabel, rLabel, gLabel, zLabel, oLabel);
var x=1, y=1;
// let each_Slider = aSlider, bSlider, cSlider, dSlider, rSlider, gSlider, zSlider, oSlider;
let slider_Value = new Array(a.toFixed(2), b.toFixed(2), c.toFixed(2), d.toFixed(2), r.toFixed(0), g.toFixed(0), z.toFixed(0), o.toFixed(0));
// UI set up
function setup() {
const rSlider = createSlider(0,255,r, 0.01);
const rLabel = createElement('h3', "Red = " + slider_Value[4]);
const gSlider = createSlider(0,255,g, 0.01);
const gLabel = createElement('h3', "Green = " + slider_Value[5]);
const zSlider = createSlider(0,255,z, 0.01);
const zLabel = createElement('h3', "Blue = " + slider_Value[6]);
const oSlider = createSlider(0,100,o, 0.01);
const oLabel = createElement('h3', "Opacity = " + slider_Value[7]);
const aSlider = createSlider(-3,3,a, 0.1);
const aLabel = createElement('h3', slider_Value[0]);
const bSlider = createSlider(-3,3,b,0.1);
const bLabel = createElement('h3', slider_Value[1]);
const cSlider = createSlider(-3,3,c,0.1);
const cLabel = createElement('h3', slider_Value[2]);
const dSlider = createSlider(-3,3,d,0.1);
const dLabel = createElement('h3', slider_Value[3]);
var myButton = createButton("Redraw")
myButton.mousePressed(function() {
a = aSlider.value();
b = bSlider.value();
c = cSlider.value();
d = dSlider.value();
r = rSlider.value();
g = gSlider.value();
z = zSlider.value();
o = oSlider.value();
background(245);
stroke(r, g, z, o);
})
slider_Value;
createCanvas(1000, 1000);
stroke(r, g, z, o);
pixelDensity(1);
}
// Attractor sketching
function draw() {
for(var i = 0; i < 1000; i++) {
var oldX = x;
var oldY = y;
x = sin(a * oldY) - cos(b * oldX);
y = sin(c * oldX) - cos(d * oldY);
var scaledX = map(x, -2, 2, 0, width);
var scaledY = map(y, -2, 2, 0, height);
point(scaledX, scaledY);
}
}
最近一段时间我一直在为 p5.js 苦苦挣扎,它是一个帮助我学习 JS 的非常小的项目,但我似乎无法获得实时更新的值以显示在 input() 上或更改().控制台说它不是函数,即使它们在同一范围内 运行 没有问题。
如果有人有任何想法,我已经被困了一段时间并看了很多教程,但 none 似乎解决了如何处理多个滑块元素。
您可以创建一个函数来创建更新对象中值的滑块。
function randomNumber(min, max) {
return Math.random() * (max - min) + min;
}
let vars = {};
function addSlider(variable, min, max, val, step, text) {
let slider = createSlider(min, max, val, step);
let label = createSpan(text.replace("#", val.toFixed(2)));
createElement("br");
let onInput = () => {
vars[variable] = slider.value();
label.html(text.replace("#", slider.value().toFixed(2)));
background(245);
stroke(vars.r, vars.g, vars.z, vars.o);
};
slider.input(onInput);
vars[variable] = val;
}
// UI set up
function setup() {
addSlider("r", 0, 255, randomNumber(0, 255), 0.01, "Red = #");
addSlider("g", 0, 255, randomNumber(0, 255), 0.01, "Green = #");
addSlider("z", 0, 255, randomNumber(0, 255), 0.01, "Blue = #");
addSlider("o", 0, 100, 50, 0.01, "Opacity = #")
addSlider("a", -3, 3, randomNumber(-3, 3), 0.1, "#");
addSlider("b", -3, 3, randomNumber(-3, 3), 0.1, "#");
addSlider("c", -3, 3, randomNumber(-3, 3), 0.1, "#");
addSlider("d", -3, 3, randomNumber(-3, 3), 0.1, "#");
createCanvas(1000, 1000);
stroke(vars.r, vars.g, vars.z, vars.o);
pixelDensity(1);
}
// Attractor sketching
let x = 1, y = 1;
function draw() {
for(let i = 0; i < 1000; i++) {
let oldX = x;
let oldY = y;
x = sin(vars.a * oldY) - cos(vars.b * oldX);
y = sin(vars.c * oldX) - cos(vars.d * oldY);
let scaledX = map(x, -2, 2, 0, width);
let scaledY = map(y, -2, 2, 0, height);
point(scaledX, scaledY);
}
}