いつもお世話になっています。
前提・実現したいこと
状態遷移によって表示を変えることのできるコードを作りたいと思っています。
- C#で0~2の3つの整数のうち1つを送信
(適宜値を変更でき、次の変更があるまでその値を保持しながら送信)
0. データを受信@processing
0. 受信した状態量(値)をもとに、background()を変更
今悩んでいるのは、3. のところです。
発生している問題・エラーメッセージ
先の図のように状態量や状態遷移に応じて表示に変化を持たせられるような
書き方を教えていただければと思います。
例えば、状態量(値)が
1
1
2
2
2
のようになってたとすると、
1|点滅
1|点滅
2|255から0へフェードアウト開始(G = 255)
2|上の途中(例えば、G = 254)
2|上の途中(例えば、G = 253)
の様になってほしいです。
並列処理で
メインスレッド|background(0, G, 0);
サブスレッド |受信した状態量に応じてGの値を変えてメインスレッドに渡す
のが良いのでしょうか。
該当のソースコード
フェードアウト・インについては
こちら
を参考にしています。
※マウスクリックの関数は動作確認のために抜いていません。
processing
1//import hypermedia.net.*; 2//UDP udp; 3 4int nowState = 0; 5int beforeState = 0; 6float gValue = 255; 7boolean cngAlpha; //変化開始FLG 8boolean fadeMode; //フェードイン・アウト切り替えFLG 9 10void receive (byte[] data, String ip, int port) 11{ 12 String message = new String(data); 13 String[] rcvMSG = splitTokens(message, " "); 14 //state1 = float(rcvMSG[0]); 15} 16 17void setup() { 18 //透明度の変化は「停止」にしておく 19 cngAlpha = false; 20 21 //最初はフェードアウトから始めたいので 22 //現在の状態を「フェードイン」に仮設定する 23 fadeMode = true; 24 25 size(500, 500, FX2D); 26 27 //udp = new UDP (this, 60000); 28 //udp.listen(true); 29} 30 31void draw() { 32 background(0, gValue, 0); 33 34 //透明度を変化させる場合 35 if ( cngAlpha == true ) { 36 //モードに応じて処理する 37 if ( fadeMode == true ) { 38 //フェードイン 39 fadeIn(); 40 } else { 41 //フェードアウト 42 fadeOut(); 43 } 44 } 45} 46 47//フェードイン処理関数 48void fadeIn() { 49 //徐々に濃くする 50 gValue = gValue + 4f; 51 52 //不透明になったら変化終了 53 if ( gValue > 255f ) { 54 gValue = 255f; 55 cngAlpha = false; 56 } 57} 58 59//フェードアウト処理関数 60void fadeOut() { 61 //徐々に薄くする 62 gValue = gValue - 4f; 63 64 //透明になったら変化終了 65 if ( gValue < 0f ) { 66 gValue = 0f; 67 cngAlpha = false; 68 } 69} 70 71void mouseClicked() { 72 //マウスクリックで変化開始 73 cngAlpha = true; 74 75 //クリックされるごとにフェードイン・アウトを 76 //切り替える 77 if ( fadeMode == true ) { 78 //今フェードインなら、次はフェードアウト 79 gValue = 255f; 80 fadeMode = false; 81 } else { 82 //今フェードアウトなら、次はフェードイン 83 gValue = 0f; 84 fadeMode = true; 85 } 86} 87
補足情報(FW/ツールのバージョンなど)
processing3.5.3
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。