質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
Processing

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

Q&A

解決済

1回答

3643閲覧

processing タイマー機能について

taki_rentaro

総合スコア6

Processing

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

0グッド

0クリップ

投稿2022/02/17 19:51

実現したいこと

プログラム実行と同時に動作するタイマーを作成(経過時間を確認したい)

わからない事

秒を分に繰り上げる時(59秒→0秒)に秒をリセットしたいがうまくいかない

試したこと

52行目のif文を書いたがプログラムの実行時間に対して動作するのであって表示されている数値に対してはif文が動作していない
なので初回の0.99秒では動作し0.00秒に戻るが2度目の0.99秒ではリセットされずにカウントは増え続ける。

Processing

1PImage img; // 画像 2ArrayList<Logo> logos = new ArrayList<Logo>(); // 配列変数 3 4int base_time = 0; 5int base_time_mil = 0; 6int base_time_sec = 0; 7int base_time_min = 0; 8int base_time_hou = 0; 9 10void setup(){ 11 size(1920,1080); 12 frameRate(60); 13 img = loadImage("DVD_logo2.png"); 14 logos.add(new Logo()); 15 16 surface.setLocation(0,0); // 実行画面位置 17} 18 19void draw(){ /* 角に当たった時にロゴを一個増やし現在のロゴ数を+1する仕様にする */ 20 21 background(0); // 背景の初期化 22 int hitCount = 0; 23 24 for (Logo logo : logos) { 25 logo.update(); 26 27 if (logo.hitCorner()) { 28 hitCount++; 29 } 30 31 logo.draw(); 32 } 33 34 for (int i = 0; i < hitCount; i++) { 35 logos.add(new Logo()); 36 } 37 38 // ロゴのカウント 39 textAlign(CENTER); 40 textSize(24); 41 fill(255,255,255,150); 42 text("DVDlogos : " + logos.size() + "", width/2, 25); 43 44 45 46 // タイマー 47 int mil = millis() / 10 - base_time_mil; // 経過時間(ミリ秒) 48 int sec = millis() / 1000 - base_time; // 経過時間(秒) 49 int min = millis() / 60000 - base_time; // 経過時間(分) 50 int hou = millis() / 3600000 - base_time; // 経過時間(時) 51 52 if(mil/99 == 1){ 53 base_time_mil = 99; 54 } 55 56 text("Elapsed time " + hou + ":" + min + ":" + sec + ":" + mil + "", width/2, 50); 57} 58 59 60 61class Logo { 62 float x_pos,y_pos; // 画像の初期位置 63 float x_direction,y_direction; // x=右か左か y=上か下か 64 color c = #FFFFFF; 65 66 Logo() { 67 x_pos = width / 2; 68 y_pos = height / 2; 69 70 float a = random(TWO_PI); 71 x_direction = cos(a) * 5; 72 y_direction = sin(a) * 5; 73 } 74 75 void update() { 76 x_pos += x_direction; 77 y_pos += y_direction; 78 79 if (width - (img.width / 2) < x_pos || x_pos < (img.width / 2)) { 80 x_direction *= -1; 81 changeColor(); 82 } 83 if (height - (img.height / 2) < y_pos || y_pos < (img.height / 2)) { 84 y_direction *= -1; 85 changeColor(); 86 } 87 } 88 89 boolean hitCorner() { 90 if (x_pos < (img.width / 2) && y_pos < (img.height / 2)) { 91 return true; 92 } 93 if (x_pos < (img.width / 2) && height - (img.height / 2) < y_pos) { 94 return true; 95 } 96 if (width - (img.width / 2) < x_pos && y_pos < (img.height / 2)) { 97 return true; 98 } 99 if (width - (img.width / 2) < x_pos && height - (img.height / 2) < y_pos) { 100 return true; 101 } 102 103 return false; 104 } 105 106 void draw() { 107 imageMode(CENTER); 108 tint(c); 109 image(img, x_pos, y_pos); 110 } 111 112 void changeColor() { 113 c = color(random(80,255), random(80,255), random(80,255)); // ロゴの色変更 114 } 115}

よろしくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

秒を分に繰り上げる時(59秒→0秒)に秒をリセットしたいがうまくいかない

60以上にならないように余りをとってください。

Processing

1int mil = millis() % 1000; 2int sec = millis() / 1000 % 60; 3int min = millis() / 60000 % 60; 4int hou = millis() / 3600000; 5 6text("Elapsed time " + hou + ":" + nf(min, 2) + ":" + nf(sec, 2) + "." + nf(mil, 3), width / 2, 50);

投稿2022/02/17 22:48

TN8001

総合スコア9326

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問