试图用我的2d游戏想出处理这个问题的最佳方法。我希望能够指定一个坐标对(x,y(和一个半径值。有了这些信息,我想对gameMap[][]的所有元素进行操作。
因此,如果半径=0:
X
如果半径=1:
xxx
xxx
xxx
如果半径=2:
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
这就是我目前所拥有的,如果半径>1 ,它就会崩溃
for(int i = 1; i < radius; i++) {
// right
setAreaObject(locX+i, locY+i);
setAreaObject(locX+i, (locY+i)-1);
setAreaObject(locX+i, locY-i);
// center
setAreaObject((locX+i)-1, locY+i);
setAreaObject((locX+i)-1, (locY+i)-1);
setAreaObject((locX+i)-1, locY-i);
// left
setAreaObject(locX-i, locY+i);
setAreaObject(locX-i, (locY+i)-1);
setAreaObject(locX-i, locY-i);
}
感谢您的任何想法或想法
for(int x = locX - radius; x <= locX + radius; x++)
{
for(int y = locY - radius; y <= locY + radius; y++)
{
setAreaObject(x, y);
}
}
如果希望半径在二维中起作用,则需要在二维中循环。您的代码只在一个方向上循环,然后手动处理Y方向上的+/-1,这就是为什么它不能缩放的原因。手动遍历循环,一次一次迭代,并手动写下对setAreaObject的调用,以更好地理解循环的评估方式。
这应该有效:
for (int x = locX - radius; x <= locX + radius; ++x) {
for (int y = locY - radius; y <= locY + radius; ++y) {
setAreaObject(x, y);
}
}
我们有一个嵌套循环来在两个维度上迭代radius
次。基本上,您可以将问题视为在radius
乘以radius
大小的正方形上调用setAreaObject
。这样想,你可以看到,我们可以通过在正方形中每个x坐标的每个y坐标上迭代,总共进行radius
*radius
次迭代。