applyforce.bmx 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. SuperStrict
  2. Framework Physics.Box2d
  3. Import SDL.SDLRenderMax2D
  4. Import "test.bmx"
  5. Import brl.standardio
  6. Graphics 800,600, 0
  7. SetBlend alphablend
  8. Run(New ApplyForce.Create(), New TSettings)
  9. Type ApplyForce Extends Test
  10. Field m_body:b2Body
  11. Method Create:ApplyForce()
  12. Init(12, 12)
  13. m_world.SetGravity(New b2Vec2.Create(0.0, 0.0))
  14. Const k_restitution:Float = 0.4
  15. Local bd:b2BodyDef = New b2BodyDef
  16. bd.SetPosition(New b2Vec2.Create(0.0, 20.0))
  17. Local ground:b2Body = m_world.CreateBody(bd)
  18. Local sd:b2PolygonDef = New b2PolygonDef
  19. sd.SetDensity(0.0)
  20. sd.SetRestitution(k_restitution)
  21. sd.SetAsOrientedBox(0.2, 20.0, New b2Vec2.Create(-20.0, 0.0), 0.0)
  22. ground.CreateShape(sd)
  23. sd.SetAsOrientedBox(0.2, 20.0, New b2Vec2.Create(20.0, 0.0), 0.0)
  24. ground.CreateShape(sd)
  25. sd.SetAsOrientedBox(0.2, 20.0, New b2Vec2.Create(0.0, -20.0), 90)
  26. ground.CreateShape(sd)
  27. sd.SetAsOrientedBox(0.2, 20.0, New b2Vec2.Create(0.0, 20.0), 90)
  28. ground.CreateShape(sd)
  29. Local xf1:b2XForm = New b2XForm.Create()
  30. xf1.R.SetAngle(63.432)
  31. xf1.SetPosition(b2Mul(xf1.R, New b2Vec2.Create(1.0, 0.0)))
  32. Local sd1:b2PolygonDef = New b2PolygonDef
  33. Local vertices:b2Vec2[] = New b2Vec2[3]
  34. vertices[0] = b2MulF(xf1, New b2Vec2.Create(-1.0, 0.0))
  35. vertices[1] = b2MulF(xf1, New b2Vec2.Create(1.0, 0.0))
  36. vertices[2] = b2MulF(xf1, New b2Vec2.Create(0.0, 0.5))
  37. sd1.SetVertices(vertices)
  38. sd1.SetDensity(2.0)
  39. Local xf2:b2XForm = New b2XForm.Create()
  40. xf2.R.SetAngle(-63.432)
  41. xf2.SetPosition(b2Mul(xf2.R, New b2Vec2.Create(-1.0, 0.0)))
  42. Local sd2:b2PolygonDef = New b2PolygonDef
  43. vertices = New b2Vec2[3]
  44. vertices[0] = b2MulF(xf2, New b2Vec2.Create(-1.0, 0.0))
  45. vertices[1] = b2MulF(xf2, New b2Vec2.Create(1.0, 0.0))
  46. vertices[2] = b2MulF(xf2, New b2Vec2.Create(0.0, 0.5))
  47. sd2.SetVertices(vertices)
  48. sd2.SetDensity(2.0)
  49. bd = New b2BodyDef
  50. bd.SetAngularDamping(2.0)
  51. bd.SetLinearDamping(0.1)
  52. bd.SetPosition(New b2Vec2.Create(0.0, 1.05))
  53. bd.SetAngle(180)
  54. m_body = m_world.CreateBody(bd)
  55. m_body.CreateShape(sd1)
  56. m_body.CreateShape(sd2)
  57. m_body.SetMassFromShapes()
  58. Return Self
  59. End Method
  60. Method Keyboard()
  61. Super.Keyboard()
  62. If KeyDown(KEY_W) Then
  63. Local f:b2Vec2 = m_body.GetWorldVector(New b2Vec2(0.0, -50.0))
  64. Local p:b2Vec2 = m_body.GetWorldPoint(New b2Vec2(0.0, 1.0))
  65. m_body.ApplyForce(f, p)
  66. End If
  67. If KeyDown(KEY_A)
  68. m_body.ApplyTorque(10.0)
  69. End If
  70. If KeyDown(KEY_D)
  71. m_body.ApplyTorque(-10.0)
  72. End If
  73. End Method
  74. End Type