#android #android-intent #accelerometer #sensors
#Android #android-намерение #акселерометр #датчики
Вопрос:
Ну, у меня есть приложение с шариком, перемещающимся с помощью датчика акселерометра, теперь я хочу, чтобы оно отображало меня на экране «GameOver.java » когда мяч касается углов (верхнего, нижнего, левого и правого экрана).
Вот мой код :
package com.example.theball;
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.drawable.ShapeDrawable;
import android.graphics.drawable.shapes.OvalShape;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.view.Menu;
import android.widget.ImageView;
@SuppressWarnings("deprecation") public class MainActivity extends Activity implements SensorEventListener {
private SensorManager sensorManager;
private Sensor accelerometer;
private long lastUpdate;
AnimatedView animatedView = null;
ShapeDrawable mDrawable = new ShapeDrawable();
public static int x;
public static int y;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_main);
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
accelerometer = sensorManager
.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
lastUpdate = System.currentTimeMillis();
animatedView = new AnimatedView(this);
setContentView(animatedView);
}
@Override
protected void onResume() {
super.onResume();
sensorManager.registerListener(this, accelerometer,
SensorManager.SENSOR_DELAY_GAME);
}
@Override
protected void onPause() {
super.onPause();
sensorManager.unregisterListener(this);
}
@Override
public void onAccuracyChanged(Sensor arg0, int arg1) {
// TODO Auto-generated method stub
}
@Override
public void onSensorChanged(SensorEvent event) {
// TODO Auto-generated method stub
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
x -= (int) event.values[0];
y = (int) event.values[1];
}
}
public class AnimatedView extends ImageView {
static final int width = 50;
static final int height = 50;
public AnimatedView(Context context) {
super(context);
// TODO Auto-generated constructor stub
mDrawable = new ShapeDrawable(new OvalShape());
mDrawable.getPaint().setColor(0xffffAC23);
mDrawable.setBounds(x, y, x width, y height);
}
@Override
protected void onDraw(Canvas canvas) {
mDrawable.setBounds(x, y, x width, y height);
mDrawable.draw(canvas);
invalidate();
}
}
}
Ответ №1:
Предполагая, что я правильно понял ваш вопрос:
Каждый раз, когда шарик перемещается — в вашем методе onSensorChanged(..) — вам нужно проверить, x == upper x bound or lower x bound
и если y == upper y bound or lower y bound
… Если какое-либо из этих условий выполняется на true
, это означает, что центр шара касается края и GameOver.java должно быть запущено:
Редактировать:
// where 0 is the lower bound and 50 is the upper bound of our canvas
if(x <= 0 || x >= 50 || y <= 0 || y >= 50) {
Intent myIntent = new Intent(this, GameOver.class);
startActivity(myIntent);
}
Комментарии:
1. Я имел в виду, что если мой шар исчезнет с экрана, это скажет, что я проиграл (намерение gameover), я думаю, вы правильно меня поняли, но как мне проверить ваши случаи? if (x> xbound) { } … Я не знаю, что вы имели в виду..
2. из того, что я вижу, похоже, что ваши нижние границы равны 0, а верхние — 50, поэтому позвольте мне очень быстро отредактировать мой ответ
3. Я не могу проверить, работает ли оно по одной причине: при запуске шарик касается верха: P как мне изменить место запуска шарика?
4. Хммм, вы пробовали возиться со значениями setBounds x и y в методе onDraw()?
5. Ну да, я пытался это сделать: mDrawable.setBounds(100, 100, 100, 100); .. но все равно нет..