1+ var Example = Example || { } ;
2+
3+ Example . substep = function ( ) {
4+ var Engine = Matter . Engine ,
5+ Render = Matter . Render ,
6+ Runner = Matter . Runner ,
7+ Events = Matter . Events ,
8+ Composite = Matter . Composite ,
9+ MouseConstraint = Matter . MouseConstraint ,
10+ Mouse = Matter . Mouse ,
11+ Bodies = Matter . Bodies ;
12+
13+ // create engine
14+ var engine = Engine . create ( ) ,
15+ world = engine . world ;
16+
17+ // create renderer
18+ var render = Render . create ( {
19+ element : document . body ,
20+ engine : engine ,
21+ options : {
22+ width : 800 ,
23+ height : 600 ,
24+ wireframes : false ,
25+ showDebug : true ,
26+ background : '#000' ,
27+ pixelRatio : 2
28+ }
29+ } ) ;
30+
31+ Render . run ( render ) ;
32+
33+ // create runner with higher precision timestep (requires >= v0.20.0 beta)
34+ var runner = Runner . create ( {
35+ delta : 1000 / ( 60 * 10 ) , // 600Hz delta = 1.666ms = 10upf @ 60fps (10x default precision)
36+ maxFrameTime : 1000 / 50 // performance budget
37+ } ) ;
38+
39+ Runner . run ( runner , engine ) ;
40+
41+ // demo substepping using very thin bodies (than is typically recommended)
42+ Composite . add ( world , [
43+ Bodies . rectangle ( 250 , 250 , 300 , 1.25 , {
44+ frictionAir : 0 ,
45+ friction : 0 ,
46+ restitution : 0.9 ,
47+ angle : 0.5 ,
48+ render : {
49+ lineWidth : 0.5 ,
50+ fillStyle : '#f55a3c'
51+ }
52+ } ) ,
53+ Bodies . circle ( 200 , 200 , 2.25 , {
54+ frictionAir : 0 ,
55+ friction : 0 ,
56+ restitution : 0.9 ,
57+ angle : 0.5 ,
58+ render : {
59+ fillStyle : '#fff'
60+ }
61+ } )
62+ ] ) ;
63+
64+ // add bodies
65+ Composite . add ( world , [
66+ Bodies . rectangle ( 400 , 0 , 800 , 50 , { isStatic : true , render : { visible : false } } ) ,
67+ Bodies . rectangle ( 400 , 600 , 800 , 50 , { isStatic : true , render : { visible : false } } ) ,
68+ Bodies . rectangle ( 800 , 300 , 50 , 600 , { isStatic : true , render : { visible : false } } ) ,
69+ Bodies . rectangle ( 0 , 300 , 50 , 600 , { isStatic : true , render : { visible : false } } )
70+ ] ) ;
71+
72+ // scene animation
73+ Events . on ( engine , 'afterUpdate' , function ( event ) {
74+ engine . gravity . scale = 0.00035 ;
75+ engine . gravity . x = Math . cos ( engine . timing . timestamp * 0.0005 ) ;
76+ engine . gravity . y = Math . sin ( engine . timing . timestamp * 0.0005 ) ;
77+ } ) ;
78+
79+ // add mouse control
80+ var mouse = Mouse . create ( render . canvas ) ,
81+ mouseConstraint = MouseConstraint . create ( engine , {
82+ mouse : mouse ,
83+ constraint : {
84+ stiffness : 0.2 ,
85+ render : {
86+ visible : false
87+ }
88+ }
89+ } ) ;
90+
91+ Composite . add ( world , mouseConstraint ) ;
92+
93+ // keep the mouse in sync with rendering
94+ render . mouse = mouse ;
95+
96+ // fit the render viewport to the scene
97+ Render . lookAt ( render , {
98+ min : { x : 0 , y : 0 } ,
99+ max : { x : 800 , y : 600 }
100+ } ) ;
101+
102+ // context for MatterTools.Demo
103+ return {
104+ engine : engine ,
105+ runner : runner ,
106+ render : render ,
107+ canvas : render . canvas ,
108+ stop : function ( ) {
109+ Matter . Render . stop ( render ) ;
110+ Matter . Runner . stop ( runner ) ;
111+ }
112+ } ;
113+ } ;
114+
115+ Example . substep . title = 'High Substeps (Low Delta)' ;
116+ Example . substep . for = '>=0.20.0' ;
117+
118+ if ( typeof module !== 'undefined' ) {
119+ module . exports = Example . substep ;
120+ }
0 commit comments