Мне удалось распечатать координаты ячейки при ее нажатии.Изменение цвета заливки ячейки при нажатии на Обработка
Теперь я ищу помощь и совет, чтобы использовать эти данные, чтобы изменить цвет ячейки на красный - если ячейка не выбрана, это базовая ячейка, я хочу, чтобы они оставались постоянными. Вот код, я работаю с:
Tile[][] tileArray = new Tile[10][10];
int rows = 10;
int cols = 10;
int[] base = { 4,4, 4,5, 4,6, 4,7 };
void setup() {
size(500, 500);
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
tileArray[i][j] = new Tile(i*50, j*50);
}
}
}
void draw() {
for (int i=0; i<base.length; i+=2) {
fill(0, 0, 255);
rect(base[i]*50, base[i+1]*50, 50, 50);
}
}
void mousePressed() {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
println (mouseX/50 +"," + mouseY/50);
}
}
}
class Tile {
Tile(int x, int y) {
fill(255);
stroke(0);
rect(x, y, 50, 50);
}
}
EDIT: Я добавил функциональность, которую я искал, но я предполагаю, что я не хранятся мои данные базовой ячейки правильно. Поскольку вы все еще можете щелкнуть по базовой ячейке, и активная ячейка рисует снизу. Вот новый код:
Tile[][] tiles;
int gridSize = 10;
int tileSize = 50;
void setup() {
size (450, 400);
generateGrid();
}
void draw() {
background (255);
display();
}
public void generateGrid() {
tiles = new Tile[gridSize][gridSize];
for (int i = 0; i < gridSize; i++) {
for (int j = 0; j < gridSize; j++) {
tiles[i][j] = new Tile((i*50), (j*50), tileSize, tileSize);
}
}
}
public void display() {
for (int i = 0; i < gridSize; i++) {
for (int j = 0; j < gridSize; j++) {
tiles[i][j].display();
}
}
}
void mousePressed() {
for (int i = 0; i < gridSize; i++) {
for (int j = 0; j < gridSize; j++) {
println (mouseX/50 +"," + mouseY/50);
}
}
int mx = mouseX/50;
int my = mouseY/50;
tiles[mx][my].active = !tiles[mx][my].active;
// tiles[mx][my].base = !tiles[mx][my].base;
println(tiles[mx][my].active);
}
class Tile {
int tx, ty, tw, th;
int[] baseCell = { 4, 2, 4, 3, 4, 4, 4, 5 };
color col_default = color(255);
color col_base = color(0, 0, 255);
color col_active = color(255, 100, 50);
boolean active = false;
boolean base = false;
Tile (int itx, int ity, int itw, int ith) {
tx = itx;
ty = ity;
tw = itw;
th = ith;
}
void display() {
stroke(0);
fill(col_default);
if (active) fill (col_active);
rect(tx, ty, tw, th);
for (int i=0; i<baseCell.length; i+=2) {
fill(col_base);
rect(baseCell[i]*50, baseCell[i+1]*50, 50, 50);
}
}
}
Спасибо, что имеет большой смысл, мне удалось найти аналогичную функциональность с логикой, которую вы описали, и отредактировали ее в соответствии с моими потребностями. Хотя я не уверен, как хранить данные базовой ячейки в классе Tile. В настоящее время у меня есть функция draw, и я полагаю, что это не лучшая практика. Я отредактировал сообщение, чтобы показать свой новый код. – Kingyyy
На самом деле, играя вокруг, я думаю, что мне удалось это исправить. Не могли бы вы снова сказать мне, плохо ли моя кодовая логика? Я считаю, что когда я нажимаю базовую ячейку, активная ячейка все еще пытается рисовать снизу. – Kingyyy