我正在尝试创建一个Grid类来在行和列上排列屏幕元素。方法cellXCenter()和cellYCenter()应该返回网格上给定i单元格的坐标。
当运行此代码时,应该在每个网格单元格中绘制一个椭圆,只给出最后一个元素正确的坐标。
我做错了什么?
Grid grid;
int columns = 3;
int rows = 2;
void setup() {
size(900,600);
background(0);
grid = new Grid(columns,rows);
fill(255,0,0);
for (int i = 0 ; i < columns * rows; i++) {
ellipse(grid.cellXCenter(i+1),grid.cellYCenter(i+1),100,100);
}
}
class Grid {
//grid width, height, number of columns, number of rows
int gw;
int gh;
int cols;
int rows;
int cells; //total de celdas desde 1
float cellWidth;
float cellHeight;
Grid(int cols_, int rows_) {
gw = width;
gh = height;
cols = cols_;
rows = rows_;
cells = rows * cols;
cellWidth = gw / cols;
cellHeight = gh / rows;
}
int rowPos(int index_) {
//all index arguments one based
float i = index_;
int position = (int)Math.ceil(i/cols);
return position;
}
int colPos(int index_) {
int i = index_;
int position = i - (cols * (rowPos(i) -1));
return position;
}
float cellX(int index_) {
int i = index_;
float xPos = gw * (colPos(i)/cols);
return xPos;
}
float cellXCenter(int index_) {
int i = index_;
float xCenterPos = cellX(i) - cellWidth/2;
return xCenterPos;
}
float cellY(int index_) {
int i = index_;
float yPos = gh * (rowPos(i)/rows);
return yPos;
}
float cellYCenter(int index_) {
int i = index_;
float yCenterPos = cellY(i) - cellHeight/2;
return yCenterPos;
}
}
答案 0 :(得分:0)
你需要做一些调试。我首先打印出每个单元格的位置:
-150.0, -150.0
-150.0, -150.0
750.0, -150.0
-150.0, 450.0
-150.0, 450.0
750.0, 450.0
打印出来:
{{1}}
所以你可以看到除了你的一个单元格之外的所有单元格都有负坐标,这会导致它们被拉出窗口的边缘。
现在您需要继续调试以找出这些值为负值的原因。添加更多打印语句,以确切了解代码中发生了什么,并找到不符合预期的行。
如果您将其缩小到几行并不符合您的预期,那么您可以发布更具体的问题以及MCVE。祝你好运。