Gem 'Ruby 2D' で遊ぶ(1)

20190308180919
 
Ruby でグラフィック表示のできる Gem 'Ruby 2D' で遊んでみました。アニメーションをしています。三角が丸たちの上にあります。色は半透明になっています。
コード。
ruby2d_sample2.rb

require 'ruby2d'

Width = 500
C = 15    #円の数
R = 20    #円の半径

L = 150   #三角形の一辺の長さ

set width: Width, height: Width

circles = C.times.map {
  Circle.new x: rand(R..Width - R), y: rand(R..Width - R),
     radius: R, color: Color.new([rand, rand, rand, 0.8]), z: 0
}
cvs = circles.map {[rand(-3.0..3.0), rand(-3.0..3.0)]}    #円の移動ベクトル

triangle = 4.times.map {|i|
  cn = Width / 2.0
  xs = [cn - L / 2.0, cn + L / 2.0]
  height = L * 0.866
  
  case i
  when 0, 1
    j = i * 2 - 1
    x1, y1 = xs[0], cn - height / 2 * j
    x2, y2 = xs[1], cn - height / 2 * j
    x3, y3 = cn, cn + height / 2 * j
  else
    j = i * 2 - 5
    x1, y1 = cn - height / 2 * j, xs[0]
    x2, y2 = cn - height / 2 * j, xs[1]
    x3, y3 = cn + height / 2 * j, cn
  end
  
  Triangle.new x1: x1, y1: y1, x2: x2, y2: y2, x3: x3, y3: y3,
     color: "#FAB536", z: 10, opacity: 0.8
}
triangle.each(&:remove)

h = {0=>0, 1=>2, 2=>1, 3=>3}
t = 0

update do
  #円の移動
  circles.zip(cvs).each do |c, vec|
    c.x += vec[0]
    c.y += vec[1]
    c.x = Width + R if c.x < -R
    c.y = Width + R if c.y < -R
    c.x = -R if c.x > Width + R 
    c.y = -R if c.y > Width + R 
  end
  
  #三角形の回転
  k = t / 100 % 4
  triangle[h[k]].add
  triangle[h[(k - 1) % 4]].remove
  
  t += 1
end

show

 
'Ruby 2D' についてはこちらで紹介しています。
obelisk.hatenablog.com