練習問題2
Get Version
1.0.0課題14: マウスの位置に反応する形
# kadai14.rb require 'sgl' window 200,200 loop do x = mouseX y = mouseY rect x-5, y-5, x+5, y+5 flip end
mouseXとmouseYでマウス位置を取得する.rectで四角形を描画する.
rectの前にcolor x, y, 0
をいれてみる.
line 0, 0, x, y line 200, 0, x, y line 0, 200, x, y line 200, 200, x, y
課題15: 複雑な形の描画
# kadai15.rb require 'sgl' window -200, -200, 200, 200 beginObj(POLYGON) vertex 60, 90 vertex -120, 60 vertex -90, -90 vertex 120, -90 endObj wait
window -200, -200, 200, 200
のようにして四つの値を指定できる.
beginObjとendObjではさまれた領域で形を描く.
beginObj(POLYGON) color 100, 0, 0, 100 vertex 60, 90 color 0, 100, 0, 100 vertex -120, 60 color 0, 0, 100, 100 vertex -90, -90 color 100, 100, 0, 100 vertex 120, -90 endObj
頂点ごとに色を指定できる.
beginObj(POLYGON) color 100, 0, 0, 0 vertex 60, 90 color 0, 100, 0, 100 vertex -120, 60 color 0, 0, 100, 100 vertex -90, -90 color 100, 100, 0, 0 vertex 120, -90 endObj
頂点ごとに透明度も変えられる.
課題16: スムースな線の描画
# kadai16.rb require 'sgl' useSmooth window -200, -200, 200, 200 beginObj(LINE_LOOP) color 100, 0, 0, 100 vertex 60, 90 color 0, 100, 0, 50 vertex -120, 60 color 0, 0, 100, 50 vertex -90, -90 color 100, 100, 0, 100 vertex 120, -90 endObj wait
windowの前にuseSmoothを指定することによって,アンチエイリアスを かけることができる.
beginObjの括弧の中は,POLYGON
またはLINE_LOOP
を指定する.
この二つがあればほぼ十分であるが,他に下記方法も指定できる.
LINES, POINTS, LINE_STRIP, LINE_LOOP, TRIANGLES, TRIANGLE_STRIP, TRIANGLE_FAN, QUADS, QUAD_STRIP, POLYGON,
課題17: 物体の移動
# kadai17.rb require 'sgl' useSmooth window -200, -200, 200, 200 push translate 100, 0 rotateZ 10 scale 2 rect -5, -5, 5, 5 pop wait
今回でてきた新しいコマンド, push, pop, translate, rotateZ, scaleを使って回転移動拡大縮小などができ るようになる.pushとpopで囲まれていることが非常に重要である.また襦袢 として,translate, rotateZ, scaleの順番に指定することが重要.形を描く コマンドと,位置,回転角度などの指定を分離できる.
課題18: ボタンが押された時に
# kadai18.rb require 'sgl' def setup window -200, -200, 200, 200 background 0 $x = 0 $y = 0 end def onMouseDown(x, y) $x = x $y = y end def display line 0, 0, $x, $y end mainloop
いままではプログラムはかかれている順番通りに実行されるものだったが,こ こでは違う順序となっている.まず最初にコマンドを登録し,それが後に呼ば れて実行されることになる.このようにプログラムの実行順番が違う方式をこ れから採用する.
setup, onMouseDown, displayというコマンドを登録する.その後mainloopと いうコマンドを呼ぶ.このメインループの中で,全てのプログラムが実行され, 適宜setup, displayが呼び出される.マウスのボタンが押された瞬間に, onMouseDownというコマンドが呼ばれる.
そのonMouseDownの前に,$xという$のついた変数がつかわれている.変数には
それぞれ使える範囲というのもがあるのだが,通常は一つのコマンドの範囲内
でしか使うことができなかった.しかし,$のついた変数であれば,プログラ
ムが動いている間ずっと残る.プログラムの最初の部分で,$x = 0
のように
して,あらかじめなんらかの値を代入することで,変数を使うということを示
す必要がある.
30th June 2007