1+ // Android Mode tutorials
2+ // http://android.processing.org/tutorials/
3+ // Sensors - Boxes example
4+
5+ // Rectangles trapped inside the screen, and moving by gravity
6+ // Based on Box2DProcessing from The Nature of Code
7+
8+ import android.content.Context ;
9+ import android.hardware.Sensor ;
10+ import android.hardware.SensorManager ;
11+ import android.hardware.SensorEvent ;
12+ import android.hardware.SensorEventListener ;
13+
14+ import shiffman.box2d.* ;
15+ import org.jbox2d.collision.shapes.* ;
16+ import org.jbox2d.common.* ;
17+ import org.jbox2d.dynamics.* ;
18+
19+ Context context;
20+ SensorManager manager;
21+ Sensor sensor;
22+ AccelerometerListener listener;
23+ float ax, ay, az;
24+
25+ Box2DProcessing box2d;
26+ ArrayList<Box > boxes;
27+ ArrayList<Wall > walls;
28+
29+ void setup () {
30+ fullScreen(P2D );
31+ orientation(PORTRAIT );
32+
33+ context = getActivity();
34+ manager = (SensorManager )context. getSystemService(Context . SENSOR_SERVICE );
35+ sensor = manager. getDefaultSensor(Sensor . TYPE_ACCELEROMETER );
36+ listener = new AccelerometerListener ();
37+ manager. registerListener(listener, sensor, SensorManager . SENSOR_DELAY_NORMAL );
38+
39+ box2d = new Box2DProcessing (this );
40+ box2d. createWorld();
41+
42+ // A group of boxes
43+ boxes = new ArrayList<Box > ();
44+ for (int i = 0 ; i < 20 ; i++ ) {
45+ Box p = new Box (random (200 , width - 200 ), random (200 , height - 200 ));
46+ boxes. add(p);
47+ }
48+
49+ // Invisible walls
50+ walls = new ArrayList<Wall > ();
51+ walls. add(new Wall (width / 2 , - 25 , width , 50 ));
52+ walls. add(new Wall (width / 2 , height + 25 , width , 50 ));
53+ walls. add(new Wall (- 25 , height / 2 , 50 , height ));
54+ walls. add(new Wall (width + 25 , height / 2 , 50 , height ));
55+ }
56+
57+ void draw () {
58+ background (255 );
59+
60+ // update gravity from accelerometer data.
61+ box2d. setGravity(- ax, - ay);
62+
63+ box2d. step();
64+
65+ for (Box b: boxes) {
66+ b. display();
67+ }
68+ }
69+
70+ void mousePressed () {
71+ for (Box b: boxes) {
72+ b. shake();
73+ }
74+ }
75+
76+ public void onResume () {
77+ super . onResume();
78+ if (manager != null ) {
79+ manager. registerListener(listener, sensor, SensorManager . SENSOR_DELAY_GAME );
80+ }
81+ }
82+
83+ public void onPause () {
84+ super . onPause();
85+ if (manager != null ) {
86+ manager. unregisterListener(listener);
87+ }
88+ }
89+
90+ class AccelerometerListener implements SensorEventListener {
91+ public void onSensorChanged (SensorEvent event ) {
92+ ax = event. values[0 ];
93+ ay = event. values[1 ];
94+ az = event. values[2 ];
95+ }
96+ public void onAccuracyChanged (Sensor sensor , int accuracy ) {
97+ }
98+ }
0 commit comments