我是javascript编程的新手,但我知道我的代码有多乱,所以我很抱歉。我想要做的是创建2(现在,最终版本将有很多)" Trees"现在只是矩形放在随机x值上。但我不希望它们在彼此的40像素范围内。我一直在尝试写一些应该达到这个目标的东西,但是我无法弄清楚它为什么不会起作用,树木依然在彼此之上产生!它让我发疯了。我顺便使用p5js和sublime text 2。
function bg(){
var tree = Math.floor(Math.random() * (380 - 0) + 00);
var tree2 = Math.floor(Math.random() * (380 - 0) + 0);
redefine(tree,tree2);
this.x=0;
this.show = function(){
noStroke();
//tree
fill(102, 51, 0);
rect(this.x+tree , 450, 26, 110);
//tree2
fill(102, 51, 0);
rect(this.x+tree2, 410, 26, 150);
}
}
function redefine(first, second){
if(second<=first-40 || second>=first+40){
console.log("good");
} else {
console.log("redefining")
second = Math.floor(Math.random() * (380 - 0) + 0);
}
}
//key
// Math.random() * (max - min) + min
答案 0 :(得分:0)
一个问题是你只给你的redefine
函数一次机会滚动另一个随机数。您可以将其更改为一个循环,一直尝试,直到他们正确的距离。
答案 1 :(得分:0)
在重新定义中,您尝试更改&#34;第二,&#34;的值。但这不会修改&#34; tree2&#34;因为它是一个局部范围的原始变量。假设你的其他逻辑是合理的,这样的事情可能有用:
function bg(){
var tree = Math.floor(Math.random() * (380 - 0) + 00);
var tree2 = Math.floor(Math.random() * (380 - 0) + 0);
while(isOverlapping(tree, tree2)) {
tree2 = Math.floor(Math.random() * (380 - 0) + 0);
}
this.x=0;
this.show = function(){
noStroke();
//tree
fill(102, 51, 0);
rect(this.x+tree , 450, 26, 110);
//tree2
fill(102, 51, 0);
rect(this.x+tree2, 410, 26, 150);
}
}
function isOverlapping(first, second){
if(second<=first-40 || second>=first+40){
console.log("good");
return false;
} else {
console.log("redefining")
return true;
}
}
答案 2 :(得分:0)
我建议使用&#34;定义&#34;接近&#34;重新定义&#34;:
function bg() {
var tries = define(tree, tree2);
var tree = tries[0];
var tree2 = tries[1];
this.x = 0;
this.show = function () {
noStroke();
//tree
fill(102, 51, 0);
rect(this.x + tree, 450, 26, 110);
//tree2
fill(102, 51, 0);
rect(this.x + tree2, 410, 26, 150);
}
}
function define() {
var tries = [];
tries[0] = 0;
tries[1] = 0;
var i = 0;
while(tries[1] - tries[0] <= 40 && tries[0] - tries[1] <= 40){
tries[0] = Math.floor(Math.random() * (380 - 0) + 0);
tries[1] = Math.floor(Math.random() * (380 - 0) + 0);
i++;
console.info('iter:',i,' inside tree:',tries[0],' tree2:',tries[1]);
}
return tries;
}