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 do
  Circle.new x: rand(R..Width - R), y: rand(R..Width - R),
     radius: R, color: Color.new([rand, rand, rand, 0.8]), z: 0
end
cvs = circles.map {[rand(-3.0..3.0), rand(-3.0..3.0)]}

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

t = 0
update do
  circles.each_with_index do |c, i|
    c.x += cvs[i][0]
    c.y += cvs[i][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
  
  tri[h[i = t / 100 % 4]].add
  tri[h[(i - 1) % 4]].remove
  t += 1
end

show

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