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

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

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

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

Q&A

1回答

1667閲覧

processing落ちてくる図形を積み重ねていくにはどうすればいいですか

honey_8t1

総合スコア5

Processing

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

0グッド

0クリップ

投稿2020/01/16 05:20

編集2020/01/16 05:22

前提・実現したいこと

パンケーキが落ちてきて、動くお皿に触れたらパンケーキがお皿に乗り、積み重ねていけるようにしたいのですが、どのようにコードを打てば乗ってくれるでしょうか。

また、重ねられたパンケーキをカウントする方法を知っている方がいましたら教えていただけると嬉しいです。
ご協力お願いします。

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

エラーメッセージ

該当のソースコード

PFont myfont; float x; float y; float speed = 10; int ix,iy,ispeed; int kaisu = 0; void initPos() { ix = int(random(width)); ispeed = int(random(3,4)); iy = -10; } void setup() { size(500, 500); myfont = createFont("MS Gothic", 48); textFont(myfont, 48); textSize(15); initPos(); } void draw() { background(#D7F3FA); //////机//////// fill(#A74C0F); rect(10,400,480,50); fill(#93420C); rect(20,450,50,50); fill(#93420C); rect(430,450,50,50); fill(#FFD1F5); noStroke(); triangle(100,400,400,400,250,480); //////カウント//////// fill(#A56920); text("パンケーキの枚数:" + kaisu,30,30); ///////皿/////// fill(255,255,255); ellipse(x, 400, 200, 20); noFill(); stroke(74,252,200); strokeWeight(3); ellipse(x, 400, 200, 20); ///////移動///////// if (keyPressed) { if (keyCode == RIGHT){ x += speed; }else if (keyCode == LEFT){ x -= speed; } ///////お皿範囲//////// if(x < 120-20) x = 120-20; { if(x > 420-20) x = 420-20; } } if (dist(x, y, ix, iy)<45 || iy-20 > 360) { initPos(); } /////////パンケーキ//////// stroke(137,83,12); strokeWeight(0.5); fill(252,219,110); rect(ix-60,iy,120,20); arc(ix,iy+20,120,40,0,PI); ellipse(ix,iy,120,40); fill(#CB6F31); ellipse(ix,iy,100,30); iy += ispeed; }

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

当たり判定のコードらしきものがあったのでそれを尊重しました。
どう乗せるかを考えましたが、見た目のキレイさとコードの簡便さのため吸い込むようにしました(うまく表現できない^^;

ガタガタに乗せるなら乗った位置をリスト等で覚えておく必要があるのと、どんどん右に積み重なったりした場合にどうするのかが悩ましいです。

変更点

  • パンケーキを複数描く必要があるため関数に分けました
  • パンケーキに合わせ机とお皿も関数に分けました
  • 関数の引数と紛らわしいので変数名をわかりやすく長めの名前に変えました
  • drawが少し長く感じたので位置の更新と描画を別の関数に分けました

Processing

1int plateX; // お皿の中心X 2final int plateY = 400; // お皿の中心Y 3final int moveSpeed = 10; // お皿の移動スピード 4 5int hitY = plateY; // 当たり判定Y 最初はお皿の中心Y ケーキが乗っていくにしたがって上に上がる(値は減る) 6 7int pancakeX; // ケーキの中心X 8int pancakeY; // ケーキの中心Y 9int dropSpeed; // ケーキの落下スピード 10 11int kaisu = 0; // 乗ったケーキの数 12 13void initPos() { 14 pancakeX = int(random(width)); 15 dropSpeed = int(random(3, 4)); 16 pancakeY = -10; 17} 18 19void setup() { 20 size(500, 500); 21 textFont(createFont("MS Gothic", 48), 48); 22 textSize(15); 23 initPos(); 24 plateX = width / 2; 25} 26 27///////位置の更新///////// 28void update() { 29 ///////ケーキの落下///////// 30 pancakeY += dropSpeed; 31 32 ///////お皿の移動///////// 33 // plateX = mouseX; 34 if (keyPressed) { 35 if (keyCode == RIGHT) plateX += moveSpeed; 36 if (keyCode == LEFT) plateX -= moveSpeed; 37 } 38 39 ///////お皿の移動範囲制限//////// 40 if (plateX < 120 - 20) plateX = 120 - 20; 41 if (plateX > 420 - 20) plateX = 420 - 20; 42 43 ///////当たり判定//////// 44 if (dist(plateX, hitY, pancakeX, pancakeY) < 45) { // キャッチ成功 45 initPos(); 46 kaisu++; 47 hitY -= 20; 48 } else if (pancakeY - 20 > 360) { // キャッチ失敗 49 initPos(); 50 } 51} 52 53///////描画///////// 54void draw() { 55 update(); 56 57 background(#D7F3FA); 58 drawDesk(); 59 drawPlate(plateX, plateY); 60 for (int i = 0; i < kaisu; i++) { 61 drawPancake(plateX, plateY - (i * 20) - 20); 62 } 63 drawPancake(pancakeX, pancakeY); 64 //////カウント//////// 65 fill(#A56920); 66 text("パンケーキの枚数:" + kaisu, 30, 30); 67} 68 69 70//////机の描画//////// 71void drawDesk() { 72 fill(#A74C0F); 73 rect(10, 400, 480, 50); 74 fill(#93420C); 75 rect(20, 450, 50, 50); 76 fill(#93420C); 77 rect(430, 450, 50, 50); 78 fill(#FFD1F5); 79 noStroke(); 80 triangle(100, 400, 400, 400, 250, 480); 81} 82 83///////お皿の描画/////// 84void drawPlate(int x, int y) { 85 fill(255); 86 ellipse(x, y, 200, 20); 87 noFill(); 88 stroke(74, 252, 200); 89 strokeWeight(3); 90 ellipse(x, y, 200, 20); 91 92 //fill(0); 93 //ellipse(x, y, 20, 20); 94} 95 96/////////パンケーキの描画//////// 97void drawPancake(int x, int y) { 98 stroke(137, 83, 12); 99 strokeWeight(0.5); 100 fill(252, 219, 110); 101 rect(x - 60, y, 120, 20); 102 arc(x, y + 20, 120, 40, 0, PI); 103 ellipse(x, y, 120, 40); 104 fill(#CB6F31); 105 ellipse(x, y, 100, 30); 106 107 //fill(0); 108 //ellipse(x, y, 20, 20); 109}

アプリ画像


今回のものに使うのは難しそうですが、テイストが似ていたので何かの参考になるかもしれません。
[Sample]タピオカショット - Art Programming Basic

投稿2020/01/17 09:19

編集2023/07/18 21:22
TN8001

総合スコア9321

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問