Spielsteuerung mittels Accelerometer...

  • Antworten:1
Dr Danger
  • Forum-Beiträge: 3

12.02.2012, 23:04:22 via Website

Hi und guten Abend.

Ich habe mir mal euer super Tutorial durchgelesen: https://www.nextpit.de/de/android/wiki/view/Spieleentwicklung_101
Passend dazu wollte ich mir mal eine App programmieren auf der ich wenn ich das handy kippe ne kugel bewegen kann. Wie das geht habe ich ja in dem Tutorial gelernt. Nun habe ich das Problem, dass ich die Kugel nur ordentlich steuern kann, wenn ich das Handy flach halte. Liege ich zb. und halte das Handy über mich kann ich das nicht mehr steuern und anders gehts auch nicht.

Irgendwie komme ich nicht darauf, wie ich das programmieren muss. Kann mir da einer von euch einen Tipp geben?
Vielen Dank schonmal im Vorraus und für das Tutorial!

Antworten
Dr Danger
  • Forum-Beiträge: 3

13.02.2012, 10:58:29 via Website

Hmm also hier mal ein kleines code Beispiel von mir:

Die Anwendung zeichnet einen kleinen Kreis auf dem Bildschirm und wenn ich das Handy bewege, dann bewegt sich auch der Kreis. Stelle ich das Handy nun aber hin, läuft die Kugel nach unten. Macht ja auch Sinn, ich will aber das das nicht passiert...Ich muss das dann doch irgendwie kalibrieren, oder?

1public class SensorTestActivity extends Activity implements SensorEventListener{
2
3 private SensorManager mSensorManager;
4
5
6 private Point point = new Point(0,0);
7 View v;
8 TextView accView;
9 TextView orientView;
10
11 /** Called when the activity is first created. */
12 @Override
13 public void onCreate(Bundle savedInstanceState) {
14 super.onCreate(savedInstanceState);
15
16 LinearLayout layout = new LinearLayout(this);
17 layout.setOrientation(LinearLayout.VERTICAL);
18
19 accView = new TextView(this);
20 layout.addView(accView);
21
22 orientView = new TextView(this);
23 layout.addView(orientView);
24
25
26 v = new View(this){
27 @Override
28 protected void onDraw(Canvas canvas) {
29 // TODO Auto-generated method stub
30 super.onDraw(canvas);
31
32 if (point.x == 0){
33 point = new Point(canvas.getWidth()/2,canvas.getHeight()/2);
34 }
35 Paint p = new Paint();
36 p.setColor(Color.RED);
37 p.setStyle(Style.FILL_AND_STROKE);
38 canvas.drawCircle(point.x, point.y, 20, p);
39
40 }
41 };
42
43
44 layout.addView(v);
45 setContentView(layout);
46
47
48 mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
49
50 mSensorManager.registerListener(this, mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
51 SensorManager.SENSOR_DELAY_GAME);
52
53
54
55 }
56
57 @Override
58 protected void onResume()
59 {
60 super.onResume();
61
62 mSensorManager.registerListener(this, mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
63 SensorManager.SENSOR_DELAY_GAME);
64
65
66 }
67
68 @Override
69 protected void onStop()
70 {
71 // Unregister the listener
72 mSensorManager.unregisterListener(this);
73 super.onStop();
74 }
75
76 @Override
77 public void onAccuracyChanged(Sensor sensor, int accuracy) {
78 Log.d("TEST","changed");
79
80 }
81
82 @Override
83 public void onSensorChanged(SensorEvent event) {
84
85 if (v != null){
86 float x = event.values[0];
87 float y = event.values[1];
88 float z = event.values[2];
89 point.x-=x;
90 point.y+=y;
91 Log.d("VALUES", "x: " + x + " y:" + y + " z: " +z);
92 v.invalidate();
93 }
94 }
95}

Antworten