HelloPhysicsWorld->2D->BouncingEllipse->chapter1
最初は、円が弾むシミュレーションを実装してみる。
で、以下は円を表示するだけのrp5sketch
class Ellipse attr_accessor :x,:y,:w,:h def initialize x,y,width,height @x,@y,@w,@h = x,y,width,height end def draw ellipse_mode CENTER ellipse @x,@y,@w,@h end end def setup size 320, 240 frame_rate 15 #1sec15frameとしています。 @dot = Ellipse.new width/2,height/2,10,10 end def draw background 0 no_fill stroke 255 @dot.draw end
円が属する世界が無いので、世界を作成。
class World2D def initialize @ellipse = [] end def set_ellipse e @ellipse << e end def draw @ellipse.each{|e| e.draw } end end class Ellipse attr_accessor :x,:y,:w,:h def initialize x,y,width,height @x,@y,@w,@h = x,y,width,height end def draw ellipse_mode CENTER ellipse @x,@y,@w,@h end end $world = World2D.new def setup size 320, 240 frame_rate 15 $world.set_ellipse(Ellipse.new(width/2,height/2,10,10)) end def draw background 0 no_fill stroke 255 $world.draw end
ellipseの表示をworld2d経由に変更しただけ。多分一般的な実装だと、geometory*1とcollision*2は分離するんだろうけど*3、現状は同じとして、実装していきます。
で、チャッチャッと力を与えます。
class World2D def initialize @ellipse = [] end def set_ellipse e @ellipse << e end def set_gravity obj obj.y = obj.y + 1 end def draw @ellipse.each{|e| set_gravity e e.draw } end end
って、書いていて思ったがvecmath使いたい*A*