gpt4 book ai didi

javascript - 如何使数组对象随机移动?

转载 作者:行者123 更新时间:2023-12-03 08:35:19 35 4
gpt4 key购买 nike

根据我的教授的说法,我需要使 dotArray 中的点随机移动。我创建了一个绘制函数,根据 xrate 和 yrate 分配 dotArray 中点的 xpos 和 ypos。但是当我加载 html 页面时,控制台窗口显示一条错误消息,指出“无法读取未定义的属性‘xpos’”。并且这些点不会移动。谁能告诉我这段代码有什么问题吗?

    var randInt = function (lim){
return Math.floor(lim*Math.random());
};

// Generate random hsl color
var color = "hsl("+[0,0,0].map(function(){
return Math.round(100*Math.random())+"%"; }).join(',')+")";

// Qn1. Create array of dots
var dotArray = [1,100]
var i = 0; //initialize array

// Qn3 Create map function
var x = randInt(2) // x is a random number between 0 & 1
var map = function(x,a,b,n,m){
// String to link x,a,b,n,m
return n + (m-n)*(x-a)/(b-a);
};

// Creates 100 dots
while (i < 100){
dotArray[i] = paper.circle(randInt(pWidth), randInt(pWidth), 20)
dotArray[i].attr({
"fill": color, // Qn5 Initialize color to a random hue
"opacity": 0.5,// Qn6 Made the dots semi-transparent by changing its opacity attribute
});

// Initialize position of dots
dotArray[i].xpos = randInt(pWidth);
dotArray[i].ypos = randInt(pHeight);

// Initialize rate
dotArray[i].xrate = 5;
dotArray[i].yrate = 5;

// Draw function to change xpos and ypos of dots according to xrate and yrate.
var draw = function(){
dotArray[i].xpos += dotArray[i].xrate;
dotArray[i].ypos += dotArray[i].yrate;

dotArray[i].attr({'cx': dotArray[i].xpos, 'cy': dotArray[i].ypos});

if (dotArray[i].xpos > pWidth) {dotArray[i].xrate = -dotArray[i].xrate;}
if (dotArray[i].ypos > pHeight) {dotArray[i].yrate = - dotArray[i].yrate};
if (dotArray[i].xpos < 0) {dotArray[i].xrate = -dotArray[i].xrate;}
if (dotArray[i].ypos < 0) (dotArray[i].yrate = - dotArray[i].yrate);
};

console.log("dotArray is " + dotArray[i]); // Console msg to keep track of dots in the array
i++; // Increment of i at end of loop.

};
// Calls draw function
setInterval(draw, 20);

最佳答案

在您的绘制函数中,i 的值始终为 100。您应该将 draw 函数移出 while 循环并使用参数调用它以到达单个编辑;将您的绘图函数更改为此;

var draw = function(){
for (i = 0; i < dotArray.length; ++i) {
dotArray[i].xpos += dotArray[i].xrate;
dotArray[i].ypos += dotArray[i].yrate;

dotArray[i].attr({'cx': dotArray[i].xpos, 'cy': dotArray[i].ypos});

if (dotArray[i].xpos > pWidth) {dotArray[i].xrate = -dotArray[i].xrate;}
if (dotArray[i].ypos > pHeight) {dotArray[i].yrate = - dotArray[i].yrate};
if (dotArray[i].xpos < 0) {dotArray[i].xrate = -dotArray[i].xrate;}
if (dotArray[i].ypos < 0) (dotArray[i].yrate = - dotArray[i].yrate);
}
}

这将适用于您的情况,只需复制粘贴,但您也应该将该函数从 while 循环中取出。这样,在 while 循环的每次迭代中,同一个函数就不会被重新定义 100 次。

关于javascript - 如何使数组对象随机移动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33231799/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com