いつもお世話になっております。
前提・実現したいこと
この機能が達成されることを期待しています。
この図でいうと、③と④が上手く機能してくれませんでした。
発生している問題・エラーメッセージ
1から2や2から0をキーインしてもフェードイン・アウトが機能しないです。
println()で処理の流れを見てみても、いきなり255や0になり原因がつかめておりません。
問題は、何故67行目や96行目のif文に入ってくれないのか(何故、条件判定時点で0|67行目、255|96行目になっていないのか)が不明です。
該当のソースコード
processing
1SubThread sub = null; 2 3float G = 255; 4 5// 今の状態 6int keyNum = 0; 7int keyNumBefore = 0; 8 9void setup() { 10 frameRate(60); 11 size(500, 500, FX2D); 12 textSize(16); 13 textAlign(LEFT, TOP); 14 15 // サブスレッドクラスを生成 16 sub = new SubThread(); 17 //Threadクラスを生成 18 Thread subThread = new Thread(sub); 19 //実行開始 20 subThread.start(); 21} 22 23void draw() { 24 background(0, G, 0); 25 fill(0); 26 text("I am Main Thread.", 8, 0); 27 28 if ( sub != null && sub.running ) { 29 // サブスレッドが実行中 30 text("Sub Thread is Running.", 8, 20); 31 } else { 32 // サブスレッドは停止中 33 sub = null; 34 } 35 36 // 値を更新 37 keyNumBefore = keyNum; 38} 39 40void keyPressed() { 41 if (key == '0') { 42 keyNum = 0; 43 println("0 pressed"); 44 } else if (key == '1') { 45 keyNum = 1; 46 println("1 pressed"); 47 } else if (key == '2') { 48 keyNum = 2; 49 println("2 pressed"); 50 } 51} 52 53class SubThread implements Runnable { 54 // 実行許可FLG 55 private boolean running = true; 56 57 // ここが実行される 58 @Override 59 public void run() { 60 61 boolean toggle = true; 62 63 while (running) { 64 if (keyNum == 0) {// 今の状態が0 65 if (keyNumBefore != 1) {// 1つ前の状態が1(点滅)でない時|フェードイン→緑 66 // 黒→緑へフェードイン・常時緑 67 if (G + 4 < 255) { 68 G = G + 4; 69 println("now fading to 255"); 70 } else { 71 G = 255; 72 println("fade to 255 CPLT"); 73 } 74 } 75 println("Now keyNum is 0"); 76 } else if (keyNum == 1) {// 今の状態が1 77 try { 78 // 点滅間隔|0.5 [sec] 79 Thread.sleep(500); 80 } 81 catch (InterruptedException ex) { 82 ex.printStackTrace(); 83 } 84 if (toggle) { 85 G = 255; 86 println("Now G is 255"); 87 } else { 88 G = 0; 89 println("Now G is 0"); 90 } 91 toggle = !toggle; 92 } else if (keyNum == 2) {// 今の状態が2 93 println("Now keyNum is 2"); 94 if (keyNumBefore != 0) {// 1つ前の状態が0(点灯)でない時|フェードアウト→黒 95 // 緑→黒へフェードアウト・常時黒 96 if (G - 4 > 0) { 97 G = G - 4; 98 println("now fading to 0"); 99 } else { 100 G = 0; 101 println("fade to 0 CPLT"); 102 } 103 } 104 } 105 } 106 println("Sub Thread exit"); 107 } 108 109 // public void stopRunning() { 110 // running = false; 111 // } 112}
補足情報(FW/ツールのバージョンなど)
processing 3.4
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。