模拟鼠标移动,不工作
我想创建一个模拟150个鼠标在p5.js(像库里处理)20x20网格内移动。首先我随机产生150个鼠标,一切都很顺利。但在我产卵后,我试图让他们搬到邻居家中。而不是移动到其中一个邻居,并使目前的广场是空的它停留在那个已经是一个+它移动到下一个,所以而不是有150个鼠标我突然有300 ...我试图改变代码几个小时,但我无法找到proplem ...这里是我的代码:模拟鼠标移动,不工作
var w = 40;
var grid = [];
var mouses = 10;
var mouseAmount = [];
var Mouse;
var current;
function setup() {
createCanvas(800, 800);
cols = floor(width/w)
rows = floor(height/w)
// frameRate(60);
for (var j = 0; j < rows; j++) {
for (var i = 0; i < cols; i++) {
var cell = new Cells(i,j);
grid.push(cell);
}
}
amount = new Amount;
}
function draw() {
background(51);
for (var i = 0; i < grid.length; i++) {
grid[i].show();
}
amount.run();
}
function index(i, j) {
if (i < 0 || j < 0 || i > cols-1 || j > rows-1) {
return -1;
}
return i + j * cols;
}
function Cells(i, j) {
this.i = i;
this.j = j;
this.active = false;
this.moveCell = function() {
var neighbors = [];
var top = grid[index(i, j -1)];
var right = grid[index(i+1, j)];
var bottom = grid[index(i, j+1)];
var left = grid[index(i-1, j)];
if (top) {
neighbors.push(top)
}
if (right) {
neighbors.push(right)
}
if (bottom) {
neighbors.push(bottom)
}
if (left) {
neighbors.push(left)
}
if(neighbors.length > 0) {
var r = floor(random(0, neighbors.length));
return neighbors[r];
} else {
return undefined;
}
}
this.show = function() {
var x = this.i*w;
var y = this.j*w;
stroke(255);
noFill();
rect(x,y,w,w);
if(this.active == true) {
fill(155, 0, 255, 100)
rect(x, y, w, w)
}
}
}
function Amount() {
this.run = function() {
var r = floor(random(grid.length))
for (var i = 0; i < mouses; i++) {
var mouse = grid[r];
mouseAmount.push(mouse)
}
if (mouseAmount.length < 1499) {
for (var i = 0; i < mouseAmount.length; i++) {
mouseAmount[i].active = true;
}
}
if (mouseAmount.length > 1499) {
Next();
}
}
}
function Next(i,j) {
for (var i = 0; i < mouseAmount.length; i++) {
current = mouseAmount[i];
var nextCell = current.moveCell();
if (nextCell) {
nextCell.active = true;
current.active = false;
current = nextCell;
}
}
}
预先感谢您:)
我真的不明白到底是什么代码是应该做的,但有几件事对我来说很有代表性:
问题一:我不明白你是怎么回事通过你的grid
阵列。你似乎在迭代mouseAmount
,由于某种原因,它似乎从网格中持有随机单元格?这对我来说没有多大意义。为什么不直接迭代grid
数组?
问题二:然后您将小区随机移动到邻居,但不考虑邻居是否已经激活。我不确定你想要发生什么,但这似乎有点奇怪。
问题三:通常在进行这样的模拟时,必须将下一代复制到新的数据结构中,而不是在逐步完成时修改数据结构。
最大的问题是,你还没有真正解释你想要你的代码做,或者什么这个代码来替代,或者这两件事有何不同。但如果我是你,我会做出以下更改:
第一步:以更合理的方式对grid
数组进行迭代。只需遍历每个索引并针对每个单元采取适当的操作即可。如果我是你,我会使用一个二维数组,并使用嵌套的for
循环遍历它。
第二步:请确保您的移动到邻居的逻辑是正确的。你想要细胞移动到已经活动的细胞?
第三步:在修改它之前,请复制grid
。这样想一想:当你迭代网格时,假设你将一个单元向下移动一行。然后继续迭代,您将再次到达新激活的单元格。换句话说,你会在同一代中两次触摸同一个活动单元格,这肯定会让你感到困惑。
建议的意见:首先让这个工作为单个活动单元格。由于你一次有很多事情正在进行,所以很难说出发生了什么。退后一步,确保它适用于一个活动单元格,然后再移动到整个网格。
谢谢你花时间帮我用我的杂乱的代码:)我现在工作了。但是,我知道这可能看起来很奇怪,但即使它正在移动的单元格处于活动状态,但我希望它移动到该单元格,但我希望单元格在双重活动状态下可以更改颜色。你现在可能怎么做? 谢谢;) –