在 p5.Element 方法中传递参数
Passing a parameter in p5.Element method
我正在试验 p5 和 DOM。我创建了一个简单的示例,其中包含一些滑块和按钮以在浏览器中打印文本。
为什么在使用mousePressed()方法时不能传递参数?
我的意思是当我尝试做 sButton.mousePressed('Swordsman');
时它给我一个错误
下面是我的代码。对不起,如果它一团糟,我刚开始尝试这个。
let sSlider, aSlider, cSlider;
let sInput, aInput, cInput;
let sButton, aButton, cButton;
let parS, parA, parC;
let totalS, totalA, totalC;
totalS = totalA = totalC = 0;
function setup() {
createElement('h1', 'Recruit Troops');
createElement('b', 'Swordsman: ');
sInput = createInput('');
sSlider = createSlider(0, 999, 0);
sButton = createButton('recruit');
parS = createP('');
parS.hide();
sButton.mousePressed(recruting('Swordsman'));
createElement('br');
createElement('b', 'Archer');
aInput = createInput('');
aSlider = createSlider(0, 999, 0);
aButton = createButton('recruit');
parA = createP('');
parA.hide();
aButton.mousePressed(recruting('Archer'));
createElement('br');
createElement('b', 'Cavalry');
cInput = createInput('');
cSlider = createSlider(0, 999, 0);
cButton = createButton('recruit');
parC = createP('');
parC.hide();
cButton.mousePressed(recruting('Cavalry'));
createElement('br');
}
function draw() {
createCanvas(400, 400);
background(255);
updateValues();
}
function updateValues() {
sInput.value(sSlider.value());
aInput.value(aSlider.value());
cInput.value(cSlider.value());
}
function recruting(troop) {
if (troop == 'Swordsman') {
totalS += sSlider.value()
parS.html(+totalS + '' + troop + ' recruting');
} else if (troop == 'Archer') {
totalA += aSlider.value();
parA.html(+totalA + '' + troop + ' recruting');
} else if (troop == 'Cavalry') {
totalC += cSlider.value();
parC.html(+totalC + '' + troop + ' recruting');
}
}
你想实现的是可能的。你必须添加一个额外的功能。让我解释一下。
mousePressed() 方法将函数作为参数。你可以称它为 'callback function'。当您按下 dom 元素时,它会调用您传递给那里的函数。
let c = createButton('test');
c.mousePressed( doSomething );
function doSomething( msg ){
console.log(msg); //expected output: undefined
}
请注意我是如何在没有 () 的情况下通过 'doSomething' 的。 () 表示您正在执行(调用)该函数。您只想传递对整个函数的引用。
** 如果我确实添加了 (),该函数将直接执行,并且任何函数 returns(在本例中未定义)都将作为回调函数传入。
当您向 mousePressed 参数添加一个额外的函数时,您可以从该函数中调用 doSomething。
let c = createButton('test');
c.mousePressed( function(){
doSomething('Hello Vasco!');
});
function doSomething( msg ){
console.log(msg); //expected output: Hello Vasco!
}
或者,将它应用到您的代码中应该如下所示:
cButton.mousePressed( function(){
recruting('Cavalry');
});
我正在试验 p5 和 DOM。我创建了一个简单的示例,其中包含一些滑块和按钮以在浏览器中打印文本。
为什么在使用mousePressed()方法时不能传递参数?
我的意思是当我尝试做 sButton.mousePressed('Swordsman');
下面是我的代码。对不起,如果它一团糟,我刚开始尝试这个。
let sSlider, aSlider, cSlider;
let sInput, aInput, cInput;
let sButton, aButton, cButton;
let parS, parA, parC;
let totalS, totalA, totalC;
totalS = totalA = totalC = 0;
function setup() {
createElement('h1', 'Recruit Troops');
createElement('b', 'Swordsman: ');
sInput = createInput('');
sSlider = createSlider(0, 999, 0);
sButton = createButton('recruit');
parS = createP('');
parS.hide();
sButton.mousePressed(recruting('Swordsman'));
createElement('br');
createElement('b', 'Archer');
aInput = createInput('');
aSlider = createSlider(0, 999, 0);
aButton = createButton('recruit');
parA = createP('');
parA.hide();
aButton.mousePressed(recruting('Archer'));
createElement('br');
createElement('b', 'Cavalry');
cInput = createInput('');
cSlider = createSlider(0, 999, 0);
cButton = createButton('recruit');
parC = createP('');
parC.hide();
cButton.mousePressed(recruting('Cavalry'));
createElement('br');
}
function draw() {
createCanvas(400, 400);
background(255);
updateValues();
}
function updateValues() {
sInput.value(sSlider.value());
aInput.value(aSlider.value());
cInput.value(cSlider.value());
}
function recruting(troop) {
if (troop == 'Swordsman') {
totalS += sSlider.value()
parS.html(+totalS + '' + troop + ' recruting');
} else if (troop == 'Archer') {
totalA += aSlider.value();
parA.html(+totalA + '' + troop + ' recruting');
} else if (troop == 'Cavalry') {
totalC += cSlider.value();
parC.html(+totalC + '' + troop + ' recruting');
}
}
你想实现的是可能的。你必须添加一个额外的功能。让我解释一下。
mousePressed() 方法将函数作为参数。你可以称它为 'callback function'。当您按下 dom 元素时,它会调用您传递给那里的函数。
let c = createButton('test');
c.mousePressed( doSomething );
function doSomething( msg ){
console.log(msg); //expected output: undefined
}
请注意我是如何在没有 () 的情况下通过 'doSomething' 的。 () 表示您正在执行(调用)该函数。您只想传递对整个函数的引用。
** 如果我确实添加了 (),该函数将直接执行,并且任何函数 returns(在本例中未定义)都将作为回调函数传入。
当您向 mousePressed 参数添加一个额外的函数时,您可以从该函数中调用 doSomething。
let c = createButton('test');
c.mousePressed( function(){
doSomething('Hello Vasco!');
});
function doSomething( msg ){
console.log(msg); //expected output: Hello Vasco!
}
或者,将它应用到您的代码中应该如下所示:
cButton.mousePressed( function(){
recruting('Cavalry');
});