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

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

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

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

Q&A

解決済

2回答

720閲覧

processingで左右に同じ水草を表示したいのですが、右にずらしたものしか表示されません。

toriharu

総合スコア2

Processing

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

0グッド

0クリップ

投稿2021/07/17 05:58

編集2021/07/17 08:09

前提・実現したいこと

processingで左右に同じ水草を表示したいのですが、右にずらしたものしか表示されません。

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

エラーメッセージ

該当のソースコード

int kuki_x=120,kuki_y=375;//茎の始点

void setup(){
size(750,420);
}

void draw(){
background(192,227,250);

//水草
fill(67,222,120);
stroke(67,222,120);
bezier(kuki_x,kuki_y,kuki_x-45,kuki_y-135,kuki_x+20,kuki_y-230,kuki_x,kuki_y-330);
bezier(kuki_x,kuki_y,kuki_x+25,kuki_y-135,kuki_x-20,kuki_y-230,kuki_x,kuki_y-330);//茎center
bezier(kuki_x,kuki_y,kuki_x-75,kuki_y-45,kuki_x-25,kuki_y-105,kuki_x-75,kuki_y-165);//茎left
bezier(kuki_x,kuki_y,kuki_x+20,kuki_y-75,kuki_x+55,kuki_y-90,kuki_x+50,kuki_y-195);//茎right

kuki_x=+670;
bezier(kuki_x,kuki_y,kuki_x-45,kuki_y-135,kuki_x+20,kuki_y-230,kuki_x,kuki_y-330);
bezier(kuki_x,kuki_y,kuki_x+25,kuki_y-135,kuki_x-20,kuki_y-230,kuki_x,kuki_y-330);//茎center
bezier(kuki_x,kuki_y,kuki_x-75,kuki_y-45,kuki_x-25,kuki_y-105,kuki_x-75,kuki_y-165);//茎left
bezier(kuki_x,kuki_y,kuki_x+20,kuki_y-75,kuki_x+55,kuki_y-90,kuki_x+50,kuki_y-195);//茎right
}

試したこと

教科書をよく読みましたが解決できませんでした。

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

ここにより詳細な情報を記載してください。
setup, drawは絶対に使わなければいけません。

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

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

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

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

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

thkana

2021/07/17 08:07

タグ「配列」は関係ないですね。外しておいてください。
guest

回答2

0

左右で別の変数を用意した。

投稿2021/07/17 07:49

toriharu

総合スコア2

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

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

thkana

2021/07/17 08:06

それで対応できることは確かですが、ベストの手段とは言い難いかも知れません。 現状であれば、 bezier(kuki_x,kuki_y,kuki_x-45,kuki_y-135,kuki_x+20,kuki_y-230,kuki_x,kuki_y-330); bezier(kuki_x,kuki_y,kuki_x+25,kuki_y-135,kuki_x-20,kuki_y-230,kuki_x,kuki_y-330);//茎center bezier(kuki_x,kuki_y,kuki_x-75,kuki_y-45,kuki_x-25,kuki_y-105,kuki_x-75,kuki_y-165);//茎left bezier(kuki_x,kuki_y,kuki_x+20,kuki_y-75,kuki_x+55,kuki_y-90,kuki_x+50,kuki_y-195);//茎right の部分は左右で全く同じです。ならば、 void setup() { size(750, 420); } void drawAquaPlant(float kuki_x, float kuki_y) { fill(67, 222, 120); stroke(67, 222, 120); bezier(kuki_x, kuki_y, kuki_x-45, kuki_y-135, kuki_x+20, kuki_y-230, kuki_x, kuki_y-330); bezier(kuki_x, kuki_y, kuki_x+25, kuki_y-135, kuki_x-20, kuki_y-230, kuki_x, kuki_y-330);//茎center bezier(kuki_x, kuki_y, kuki_x-75, kuki_y-45, kuki_x-25, kuki_y-105, kuki_x-75, kuki_y-165);//茎left bezier(kuki_x, kuki_y, kuki_x+20, kuki_y-75, kuki_x+55, kuki_y-90, kuki_x+50, kuki_y-195);//茎right } void draw() { background(192, 227, 250); drawAquaPlant(120, 375); drawAquaPlant(670, 375); } として水草の描画を関数にまとめることで「水草の描画について一回だけ」で書くことができます。 左右の変数を変えてしまうと、多分こういう形でまとめることができません。ほぼ同じことを二度書くことになってしまうでしょう。
toriharu

2021/07/17 08:11

ありがとうございます。このような書き方は知りませんでした。今後も使えるように覚えておきます。
guest

0

ベストアンサー

プログラムを開始した時
int kuki_x=120, kuki_y=375;//茎の始点
でkuki_xは120。
draw()に入って、
kuki_xが120で左側の水草を描画。
kuki_x=+670;
つまり、xに670を代入。kuki_xは670になる。これで右側の水草を描画。

draw()を終わって、次回のdraw()に入る。
background(192, 227, 250);
で画面クリア。

kuki_xの値は670。つまり、画面の右側に水草が描画される。
kuki_x=+670;
kuki_xの値は変わらず670。つまり、さっき書いた水草に上書き。

最初の一瞬だけ左側も描画されているはずですが、その後はひたすら右側に水草を描いている、とそういうことになります。

教科書もいいけど、プログラムの動作をちゃんと追ってみれば「なぜそうなるか」はわかるはずです。だって、プログラムはソースコードに書いてある通りに動くのですから。

投稿2021/07/17 07:46

thkana

総合スコア7703

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

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

toriharu

2021/07/17 07:48

ありがとうございます。draw()をよく理解できていませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問