RubyKokubanのサンプルコードを紹介

前回の紹介が思った以上に多くの人に反応してもらえて嬉しい限りです。早く画像を貼付けたり(今やってます)音を鳴らしたい所です。

RubyKokubanで何が出来るのかよく分からない人が大半だと思うので今日はサンプルコードの紹介をしようと思います。全てのサンプルコードはongaeshi/rubykokuban-sampleにあります。

基本図形の描画(shapes.rb)

各図形を任意の位置に描画するシンプルなサンプルです。

  • 色指定
  • (オプション)線の太さを指定
  • (オプション)塗りを指定
  • 位置を指定して描画

しています。draw関数がメインでsetup関数はウィンドウのサイズを調整しているだけです。

rubykokuban-sample/shapes.rb

def setup
  set_window_size(580, 600)
  # set_window_pos(0, 0)
end

def draw
  set_background(255, 255, 255)
  
  set_fill

  set_color(87, 25, 122)
  text("circle", 125, 90)
  circle(150, 150, 50)

  set_color(220, 73, 0)
  text("triangle", 370, 90)
  triangle(350, 200, 450, 200, 400, 114)

  set_no_fill
  
  set_color(51, 106, 21)
  text("ellipse", 120, 240)
  set_line_width(5)
  ellipse(150, 300, 150, 100)

  set_color(0, 0, 0)
  text("line", 380, 240)
  set_line_width(10)
  line(350, 250, 450, 350)
  line(450, 250, 350, 350)

  set_fill

  set_color(196, 0, 0)
  text("rect", 135, 390)
  rect(100, 400, 100, 100)

  set_line_width(1)
  set_color(196, 0, 230)
  text("rect_rounded", 350, 390)
  rect_rounded(350, 400, 100, 100, 30)

  set_color(0, 0, 0)
  
  text(DebugInfo.fps, 10, 15)
  text(DebugInfo.window, 10, 30)
  text(DebugInfo.mouse, 10, 45)
end

図形を動かす(move_circles.rb)

マウス入力を受け取り、図形を動かすサンプルです。

rubykokuban-sample/move_circles.rb

openFrameworksだとマウス入力は専用のコールバック関数(mousePressed()等)を経由して取得するのですが、それだと入力判定と実際のアップデート処理が

  • 毎Fの座標更新はupdate()
  • 速度の増減はmousePressed()

とコード的に離れてしまうので Input クラスを専用に用意しました。

Inputクラスを使うと左クリックでスピードアップ、右ボタンを押しっぱなしでブレーキ、みたいな処理をupdate関数内で完結させることが出来ます。

RubyKokubanにもmouse_pressedコールバックは用意されていますが、openFrameworksを使う時に比べて使う機会は少ないです。シンプルに setup, update, draw さえ書けばインタラクティブなアプリケーションが書ける事を目指しています。

def setup
  @x = 400
  @speed = 10
end

def update
  @speed += 5 if Input.mouse_press?(0)
  @speed -= 5 if Input.mouse_down?(2) 

  @x += @speed

  if @x > 1024
    @x = 0
  elsif @x < 0
    @x = 1024 
  end
end

def draw
  set_color(255, 0, 0)
  circle(@x, 100, 30)

  set_color(0, 255, 0)
  circle(@x + 20, 200, 35)

  set_color(0, 0, 255)
  circle(@x + 40, 300, 40)

  c = (@x * 0.7) % 255
  set_color(c, c, c)
  circle(@x + 60, 400, 45)

  set_color(0, 128, 128)
  circle(Input.mouse_x, Input.mouse_y, 30)

  set_color(0, 0, 0)
  text(DebugInfo.fps, 10, 15)
  text(DebugInfo.window, 10, 30)
  text(DebugInfo.mouse, 10, 45)
  text(<<EOF, 10, 60)
speed       : #{@speed}
mouse left  : speed up
mouse right : speed down
EOF
end