質問: ### 前提・実現したいこと 円の中心の座標を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をいれて円を描こうとすると、実行したときに円が表示されません。 ``` エラーメッセージ ``` ### 該当のソースコード void setup(){ size(400,300); } void draw(){ int x =0; while(x<=500);{ ellipse(x,150,50,50); x +=50; } } ### 試したこと ここに問題に対して試したことを記載してください。 ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。
回答: 追記: 最初の回答は自分の勘違い&問題の原因がわかったので追記します。 ``` 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を描画するようなコードにする必要があります。 ``` float x = 0; void setup() { size(300, 300); ellipseMode(CENTER); frameRate(4); // 1秒あたり4回drawを呼ぶように設定 } void draw() { if (x <= 400) { fill(255); rect(0, 0, width, height); // 一旦画面を白で埋める(直前に描いた円を消す) fill(0); ellipse(x, 150, 50, 50); x += 50; } } ``` 各々の関数の使い方はリファレンスを見ましょう。