🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
並列処理

複数の計算が同時に実行される手法

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

Q&A

解決済

1回答

206閲覧

フェードイン・アウトが機能せず、急に0→255や255→0になってしまう。

P5_USER

総合スコア73

並列処理

複数の計算が同時に実行される手法

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

0グッド

0クリップ

投稿2019/11/12 09:09

いつもお世話になっております。

前提・実現したいこと

この機能が達成されることを期待しています。
この図でいうと、③と④が上手く機能してくれませんでした。
イメージ説明

発生している問題・エラーメッセージ

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

keyNum == 0 とか keyNum == 2 の場合は全くウェイトかからずフルスピードでカウントしてるので、人間の目では見えないだけでは。

投稿2019/11/12 09:49

編集2019/11/12 10:04
y_waiwai

総合スコア88038

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問