teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追加

2020/09/11 22:38

投稿

thkana
thkana

スコア7738

answer CHANGED
@@ -9,4 +9,54 @@
9
9
  > Graphics can/should only be updated inside setup() or draw().
10
10
  deepl翻訳: グラフィックの更新は setup() か draw() の中でしかできません/すべきではありません。
11
11
 
12
- って言ってます。公式のドキュメントを見るとredraw()を使えば出来そうな気がしますが、Benが言っているのでダメなんでしょう。
12
+ って言ってます。公式のドキュメントを見るとredraw()を使えば出来そうな気がしますが、Benが言っているのでダメなんでしょう。
13
+
14
+ ---
15
+ その後のコメント欄でのやりとりもあって、その辺盛り込んでみました。
16
+ ```Processing
17
+ import processing.net.*;
18
+ Client client;
19
+ int[] vals = new int [2];
20
+ void setup() {
21
+ size(200, 200);
22
+ client = new Client(this, "127.0.0.1", 5204);
23
+ background(255);
24
+ fill(0, 100);
25
+ noStroke();
26
+ for (int i =0; i<2; i++) {
27
+ vals[i] = 0;
28
+ }
29
+ }
30
+ String in;
31
+ boolean isServerCall=false;
32
+ boolean isMouseCall=false;
33
+ void draw() {
34
+ if (isServerCall) {
35
+ rect(100, 100, 50, 50);
36
+ if (in != null) {
37
+ in = in.trim();
38
+ println( "Receiving:" + in);
39
+ vals = int(split(in, ","));
40
+ ellipse(vals[0], vals[1], 16, 16);
41
+ }
42
+ isServerCall=false;
43
+ }
44
+ if( isMouseCall){
45
+ ellipse(mouseX, mouseY, 16, 16);
46
+ isMouseCall=false;
47
+ }
48
+ }
49
+ void clientEvent(Client client) {
50
+ in = client.readString();
51
+ isServerCall=true;
52
+ redraw();
53
+ }
54
+ void mouseDragged() {
55
+ String out = mouseX + "," + mouseY + "\n" ;
56
+ client.write(out);
57
+ println("Sending: " + out);
58
+ isMouseCall=true;
59
+ redraw();
60
+ }
61
+ ```
62
+ 描画はすべてdraw()に任せ、ハンドラからはredraw()経由でdraw()を呼ぶ、という形だとなんだか期待通りに動いているように見えます。