Mais conteúdo relacionado
Semelhante a プログラミング技法特論第8回 (20)
Mais de Noritada Shimizu (20)
プログラミング技法特論第8回
- 2. メソッド line(100, 100, 200, 200); 命令 ; 引数 2010.6.7 2 プログラミング技法特論#08 N.Shimizu <chiko at kaetsu.ac.jp>
- 4. メソッド void setup(){ size(400, 400); colorMode(RGB, 100, 100, 100, 100); background(0, 0, 0, 100); noStroke(); x = 0; y = 0; } 2010.6.7 プログラミング技法特論#08 N.Shimizu <chiko at kaetsu.ac.jp> 4 この範囲に対してsetupという名前をつけた
- 5. 壁にぶつかったことを見つけよう float x, y, r, dx, dy; void setup(){ size(400, 400); noStroke(); fill(255, 0, 0, 255); x = width / 2; y = height / 2; r = 20; dx = 0.5; dy = 0.5; } void draw(){ background(0, 0, 0); ellipse(x, y, r, r); x = x + dx; y = y + dy; } 2010.6.7 5 プログラミング技法特論#08 N.Shimizu <chiko at kaetsu.ac.jp>
- 6. まず普通に書いてみる void draw(){ background(0, 0, 0); ellipse(x, y, r, r); x = x + dx; y = y + dy; if(x <= r / 2 || width – r / 2 <= x){ dx = dx * -1; } if(y <= r / 2 || height– y / 2 <= x){ dy = dy * -1; } } 2010.6.7 6 プログラミング技法特論#08 N.Shimizu <chiko at kaetsu.ac.jp>
- 7. メソッドに分けよう void draw(){ background(0, 0, 0); ellipse(x, y, r, r); x = x + dx; y = y + dy; reflectByWall(); } void reflectByWall(){ if(x <= r / 2 || width – r / 2 <= x){ dx = dx * -1; } if(y <= r / 2 || height– r / 2 <= y){ dy = dy * -1; } } 2010.6.7 7 プログラミング技法特論#08 N.Shimizu <chiko at kaetsu.ac.jp>
- 8. 返り値 メソッドが仕事をした結果 意味はさまざま 作成物 計算した結果 成功 / 失敗 / ステータスコード などなど 2010.6.7 8 プログラミング技法特論#08 N.Shimizu <chiko at kaetsu.ac.jp>
- 9. 値をある範囲内に収める void draw(){ background(0, 0, 0); ellipse(x, y, r, r); x = constrain(x + dx, r / 2, width – r / 2); y = constrain(y + dy, r / 2, height – r /2); reflectByWall(); } 2010.6.7 9 プログラミング技法特論#08 N.Shimizu <chiko at kaetsu.ac.jp>
- 10. 返り値のあるメソッドを作ろう float dx(){ float ret = (mouseX – x) * 0.01; return ret; } float dy(){ float ret = (mouseY – y) * 0.01; return ret; } 2010.6.7 10 プログラミング技法特論#08 N.Shimizu <chiko at kaetsu.ac.jp>
- 11. 作ったメソッドを使おう void draw(){ ellipse(x, y, r, r); if(mousePressed){ dx = dx(); dy = dy(); } x = constrain(x + dx, r / 2, width – r / 2); y = constrain(y + dy, r / 2, height – r /2); reflectByWall(); } 2010.6.7 11 プログラミング技法特論#08 N.Shimizu <chiko at kaetsu.ac.jp>
- 13. この時のdraw void draw(){ ellipse(x, y, r, r); x = constrain(x + dx, r / 2, width – r / 2); y = constrain(y + dy, r / 2, height – r /2); reflectByWall(); } 2010.6.7 13 プログラミング技法特論#08 N.Shimizu <chiko at kaetsu.ac.jp>
- 16. 円と円との重なり 中心(x2, y2) 直径r2 中心(x1, y1), 直径r1 2010.6.7 16 プログラミング技法特論#08 N.Shimizu <chiko at kaetsu.ac.jp>
- 17. 円と円との重なり 中心(x2, y2) 直径r2 中心(x1, y1), 直径r1 dist(x1, y1, x2, y2); 2010.6.7 17 プログラミング技法特論#08 N.Shimizu <chiko at kaetsu.ac.jp>
- 18. 円と円との重なり 中心(x2, y2) 直径r2 中心(x1, y1), 直径r1 dist(x1, y1, x2, y2); <= (r2 + r1) / 2 2010.6.7 18 プログラミング技法特論#08 N.Shimizu <chiko at kaetsu.ac.jp>
- 20. メソッドにまとめて見よう void draw(){ background(0, 0, 0); fill(255, 0, 0, 255); ellipse(x, y, r, r); fill(255, 255, 255, 255); ellipse(x1, y1, r1, r1); x = constrain(x + dx, r / 2, width - r/2); y = constrain(y + dy, r / 2, height - r/2); reflectByWall(); reflectByBall(); } これを実装しよう 2010.6.7 20 プログラミング技法特論#08 N.Shimizu <chiko at kaetsu.ac.jp>