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

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

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

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

Q&A

解決済

1回答

703閲覧

円が表示されません!!

urazome

総合スコア26

Processing

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

0グッド

0クリップ

投稿2018/05/23 01:06

編集2018/05/26 10:30

前提・実現したいこと

円の中心の座標を150に固定したまま、x座標を0から400まで50ずつ増やすプログラムを作りたいです。しかし、実行したときに円が表示されません。どうしたらよいですか?
以下自分が作ったやつです。

size(400,300);
int x =0;
while(x<=500);{
ellipse(x,150,50,50);
x +=50;
}

ここに質問の内容を詳しく書いてください。
(例)PHP(CakePHP)で●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。

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

whileを使わないで円を描くと、実行したときに円が表示されます。それでwhileをいれて円を描こうとすると、実行したときに円が表示されません。

エラーメッセージ

該当のソースコード

processing

1 2```void setup(){ 3 size(400,300); 4} 5void draw(){ 6 7int x =0; 8while(x<=500);{ 9ellipse(x,150,50,50); 10x +=50; 11} 12} 13 14### 試したこと 15 16ここに問題に対して試したことを記載してください。 17 18### 補足情報(FW/ツールのバージョンなど) 19 20ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

追記:
最初の回答は自分の勘違い&問題の原因がわかったので追記します。

while(x<=500);{ // ^このセミコロンが原因 ellipse(x,150,50,50); x +=50; }

セミコロンが書いてあると上のコードはほぼ次の意味になります。

while (x <= 500) { ; // 何もなし } { ellipse(x,150,50,50); x +=50; }

つまりwhile文のところで無限ループしていたのが円が描画されない原因だと思います。
ご質問には「一つしか円が描画されない」といったことが書かれてましたが多分ソースを色々弄ってしまって現象が起きた時と今のソースコードが一致してないのではないかと想像します。

コメント欄でもちょっと申し上げましたがプログラミングは正確さ・厳密さが重要です。それは書いたコードだけでなく「質問する際に正確に現象と発生したソースコードを提示すること」も含まれます。正確な情報をやりとりしないと混乱することが多いのでそうした点も意識されるとよいと思います!

以下は元の回答

円の中心の座標を150に固定したまま、x座標を0から400まで50ずつ増やす

中心のy座標を150固定にして、中心のx座標を変化させるということですよね?

円(楕円)の描画はモードによって変わりますが、ellipseModeをCENTER or RADIUSにして

ellipse(x, y, a, a)

などとすると中心をx, yで指定できます。

ただし、setup関数の中でwhile文により繰り返してもそれらは一挙に描画されるので画面には全ての円が重なった最終的な画像しか見ることができません。アニメーションにするにはdrawである一定の時間ごとにellipseを描画するようなコードにする必要があります。

java

1float x = 0; 2 3void setup() { 4 size(300, 300); 5 ellipseMode(CENTER); 6 frameRate(4); // 1秒あたり4回drawを呼ぶように設定 7} 8 9void draw() { 10 if (x <= 400) { 11 fill(255); 12 rect(0, 0, width, height); // 一旦画面を白で埋める(直前に描いた円を消す) 13 fill(0); 14 ellipse(x, 150, 50, 50); 15 x += 50; 16 } 17}

各々の関数の使い方はリファレンスを見ましょう。
https://processing.org/reference/

投稿2018/05/23 01:33

編集2018/05/26 11:22
KSwordOfHaste

総合スコア18394

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

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

urazome

2018/05/25 00:25

アニメーションにしたいのではなく、「円の画像」が出てこなくて困ってます。実行したときにsize(400、300)の画面しか出てこないのです。調べてもそれらしいものも見つからず…。
KSwordOfHaste

2018/05/25 04:39

あら・・・自分は何か勘違いしてたみたいです。 (A)「x座標を変える」のx座標とは円の中心のx座標のことだと解釈しましたが、それはあってますか? (B)ご自分のプログラムを省略せずに全部載せてみてください。 (質問文は編集できますのでコメント欄に書くのではなく質問文のコードを編集してください。) 自分が見たところ現在のコードをそのまま解釈すれば水平方向に沢山の円が描画される気がします。
urazome

2018/05/26 07:02

はい、その通りです。コードはあれが全てで、水平方向にたくさんの円を描写したいです。周りの人は、描写されていたのに、自分のはされなくて… なにか設定がおかしいとかあるのでしょうか?
KSwordOfHaste

2018/05/26 07:07

>コードはあれが全て 質問文に載っているのは「全て」であるはずはありません。私のプログラムをよくみてください。setupという関数を定義していますよね? これだと文法エラーですよ? size(400,300); int x =0; while(x<=500);{ ellipse(x,150,50,50); x +=50; } プログラミングでは「厳密」を旨としてください。まだ自身がない点が多いはずです。省略せずにエディターに書いてあるものを残らずコピペしましょう。
urazome

2018/05/26 10:30 編集

setupやdrawなくても実行できたことがあったので、凝ったものじゃなければ必要ないと思ってました。すみません、気を付けます。 修正しました。これでどうでしょうか?
KSwordOfHaste

2018/05/26 11:23

原因らしきものの想像がつきました。回答に追記したのでごらんください。対策書いてないですがセミコロンを取れば期待通りになると思います。
urazome

2018/05/26 11:44

本当でした!ありがとうございます。セミコロン1つで起こる事の重大さがわかりました。正確さをもっと意識していこうと思います!
KSwordOfHaste

2018/05/26 12:08

こういう経験は誰でもやるものです。気づいたときかなりのショックを受けますがw;
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問