2015-08-26 2 views
0

Мне удалось распечатать координаты ячейки при ее нажатии.Изменение цвета заливки ячейки при нажатии на Обработка

Теперь я ищу помощь и совет, чтобы использовать эти данные, чтобы изменить цвет ячейки на красный - если ячейка не выбрана, это базовая ячейка, я хочу, чтобы они оставались постоянными. Вот код, я работаю с:

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); 
    } 
    } 
} 

ответ

0

Ваш класс Tile на самом деле не имеет смысла прямо сейчас. На самом деле нет смысла рисовать на экране конструктора. Вместо этого переместите эту логику в функцию draw() внутри класса Tile.

Ваш класс Tile также должен отслеживать его состояние: независимо от того, является ли это базовой ячейкой или нет, или какой-либо другой сотовой ячейки это может быть. Вы можете сделать это с помощью перечисления, или int, или набора логических элементов. Эта часть полностью зависит от вас.

Затем в вашей функции Tile.draw() вы должны проверить это состояние, чтобы решить, какой цвет рисовать. Из функции эскиза draw() просто проведите цикл по каждому Tile и скажите, чтобы он рисовал сам.

Наконец, когда вы нажимаете, просто установите состояние Tile, на которое вы нажали.

+0

Спасибо, что имеет большой смысл, мне удалось найти аналогичную функциональность с логикой, которую вы описали, и отредактировали ее в соответствии с моими потребностями. Хотя я не уверен, как хранить данные базовой ячейки в классе Tile. В настоящее время у меня есть функция draw, и я полагаю, что это не лучшая практика. Я отредактировал сообщение, чтобы показать свой новый код. – Kingyyy

+0

На самом деле, играя вокруг, я думаю, что мне удалось это исправить. Не могли бы вы снова сказать мне, плохо ли моя кодовая логика? Я считаю, что когда я нажимаю базовую ячейку, активная ячейка все еще пытается рисовать снизу. – Kingyyy