2017-09-07 14 views
1

fill()をクリックした後(変更したとき)に同じままにしてから、クリックを解除してホバーを離れると、最も簡単で簡単な方法は何でしょうか?fill()内の色をmousePressedの後で同じにするにはどうすればいいですか?

このプロジェクトでは、単にグリッドを作成しました。マウスが特定の矩形(xy)の上にマウスを置くと、その状態に基づいて色が変わります。fill(50)がデフォルトです。fill(75)はマウスがホバリングしたときのもので、fill(100)はマウスがクリックされたときのものです。しかし、ここでマウスがクリックされていないときは、マウスが四角形を離れるまでホバーフィルに戻ります。ありがとう。

int cols, rows; 
int scl = 20; 

void setup() { 
size(400, 400); 
int w = 400; 
int h = 400; 
cols = w/scl; 
rows = h/scl; 
} 

void draw() { 
background(255); 

    for (int x = 0; x < cols; x++) { 
    for (int y = 0; y < rows; y++) { 
     int xpos = x*scl; 
     int ypos = y*scl; 
     stroke(55); 
     if((mouseX >= xpos && mouseX <= xpos+scl) && 
     (mouseY >= ypos && mouseY <= ypos+scl)){ 
     fill(75); 
     if (mousePressed == true){ 
      println("Clicked at: " + xpos + " and " + ypos); 
      fill(100); 
     //here is the desired location for the fill to remain constant even 
     //after unclicking and leaving hover 
     } 
     println("Mouse at: " + xpos + " and " + ypos); 
     }else{ 
     fill(50); 
     } 

     rect(xpos, ypos, scl, scl); 
    } 
    } 
} 
+0

コードの書式を修正してもらえますか?そこには2つの 'setup()'関数があります。また、何をしようとしているのか、どのコード行が期待どおりに動作しているのか、さらに具体的にお考えください。 –

+0

申し訳ありませんが、私はそれを見ませんでした!今すぐコードを実行すると、四角形の上にマウスを置くと色が変わり、クリックすると色が変わります。 'mousePressed'の後に使用される塗りつぶし色は、クリックされた四角形をクリックしたままにするために使用します。 – Icy4614

答えて

1

スタックオーバーフローは、一般的な「どのようにこれを行うのですか」タイプの質問にはあてはまられていません。それは具体的なものです。「私はXを試しましたが、Yは期待されましたが、代わりにZを得ました。しかし、私は一般的な意味で助けようとします:

各セルの状態をデータ構造に保存し、そのデータ構造を使ってシーンを描画する必要があります。

2次元配列でこれを行うことができます。この場合、配列内の各セルはグリッド内のセルを表します。セルの状態や色を直接保存することができます。

+0

私はそのようなことを試してみましょう。Processingは、コンソールで印刷された配列を見ることができますが、常に['[I @ 4e59b084''のように表示され、何を意味するのかわかりません。 EDIT:また、この2D配列のスケルトンを設定するにはどうすればよいですか? – Icy4614

+0

@ Icy4614これは、デフォルトの動作では配列のハッシュコードを出力するだけだからです。配列の中の値を表示する独自の関数を書くことや、Java APIの関数を探すのに役立つかもしれません。 –

1

ケビン氏は言ったように、アプリケーションの状態を行列に保つ必要があります。

あなたはこのループ内でそれ

if(!matrix[xpos/scl][ypos/scl]) { 
    matrix[xpos/scl][ypos/scl] = true; 
} else { 
    matrix[xpos/scl][ypos/scl] = false; 
} 

トグル、cellをクリックすると、あなたの現在の位置を描画できるかどうか

if(matrix[x][y]) { 
    fill(204, 102, 0); // an orange color 
    rect(xpos, ypos, scl, scl); 
} 

だからあなたdraw()メソッドが見えるかどうかを、確認してください

boolean[][] matrix = new boolean[21][21]; 

このように

void draw() { 
    background(255); 
    for (int x = 0; x < cols; x++) { 
     for (int y = 0; y < rows; y++) { 
      int xpos = x*scl; 
      int ypos = y*scl; 

      stroke(55); 
      if((mouseX >= xpos && mouseX <= xpos+scl) && 
        (mouseY >= ypos && mouseY <= ypos+scl)){ 
       fill(75); 
       if (mousePressed == true){ 
        println("Clicked at: " + xpos + " and " + ypos); 
        if(!matrix[xpos/scl][ypos/scl]) { 
         matrix[xpos/scl][ypos/scl] = true; 
        } else { 
         matrix[xpos/scl][ypos/scl] = false; 
        } 
        fill(100); 
        //here is the desired location for the fill to remain constant even 
        //after unclicking and leaving hover 
       } 
       println("Mouse at: " + xpos + " and " + ypos); 
      }else{ 
       fill(50); 
      } 
      if(matrix[x][y]) { 
       fill(204, 102, 0); 
       rect(xpos, ypos, scl, scl); 
      } 
      rect(xpos, ypos, scl, scl); 
     } 
    } 
} 
+0

うわー!これは私が必要としたものです。ありがとうございました! – Icy4614

関連する問題