box2Dãããã
Ruby-Box2D
http://rubyforge.org/projects/ruby-box2d/
2007å¹´ã§ãªããæ¢ã¾ã£ã¦ããã©ãã¤ãæè¿å¥ã®äººï¼ããããã¯ãããããã ã
ãµã³ãã«ã®ããã°ã©ã ãåèã«ãBox2Dã§è¨ç®ããçµæã使ã£ã¦DXRubyã§æç»ãã¦ã¿ãã
ããªãã¡ãå¥ã«DXRubyããµãã¼ãããªãã¦ããBox2Dãã¤ã³ãã®æ¡å¼µã©ã¤ãã©ãªãããã°ã©ã¼ã«ã§ããªããã¨ãããã¨ã ã
# http://www.box2d.org/manual.html require 'rubygems' require 'dxruby' require 'box2d' include Box2d b = B2AABB.new b.minVertex.set(0.0, 0.0) # ä¸çã®å·¦ä¸ b.maxVertex.set(640.0, 480.0) # ä¸çã®å³ä¸ gravity = B2Vec2.new(0, 100.0) # éå do_sleep = true w = B2World.new(b,gravity,do_sleep) # ä¸çä½æ groundBoxDef = B2BoxDef.new # å°é¢ã®åè§ä½æ groundBoxDef.extents.set(320.0, 20.0) # 大ããï¼ groundBoxDef.density = 0.0 groundBodyDef = B2BodyDef.new # å°é¢ä½æ groundBodyDef.position.set(320.0, 400.0) # å ´æ groundBodyDef.add_shape(groundBoxDef) # åè§ã®å½¢ãè¨å® ground = w.create_body(groundBodyDef) # ä¸çã«è¿½å #ãªãã§å°é¢ã¯è½ã¡ãªãï¼ body = [] for i in 0..10 boxDef = B2BoxDef.new boxDef.extents.set(30.0, 30.0) boxDef.density = 1.0 boxDef.friction = 0.3 bodyDef = B2BodyDef.new bodyDef.position.set(rand(700),rand(300)) bodyDef.add_shape(boxDef); body.push w.create_body(bodyDef); end timeStep = 1.0 / 60.0 iterations = 10 image = Image.new(60,60).box(0,0,99,99, [255,255,255]) gimage = Image.new(640,40).box(0,0,639,479, [255,255,255]) Window.loop do w.step(timeStep, iterations) body.each do |b| pos = b.get_origin_position() rot = b.get_rotation() Window.drawRot(pos.x-30, pos.y-30, image, rot / 2 / Math::PI * 360) end pos = ground.get_origin_position() rot = ground.get_rotation() Window.drawRot(pos.x-320, pos.y-20, gimage, rot / 2 / Math::PI * 360) end