Другие вопросы по теме, но это как-то иначе.Android: Есть ли способ запрограммировать «обнаружение столкновения» между двумя экземплярами объекта?
В принципе, у меня есть этот класс под названием «Player», который я умножаю на определенное количество раз. Этот класс генерирует случайные координаты в холсте, а растровые изображения перемещаются к этим координатам. Теперь проблема в том, что некоторые из них накладываются друг на друга, делая их «нереальными».
Я пробовал простой оператор «if» внутри класса «Player», но он не работает, поскольку каждый экземпляр класса принимает в счет только его переменные и игнорирует переменные других экземпляров.
Вот код:
У меня это первый класс с другим классом вложенными:
public class MainActivity extends Activity{
Game gameView;
float k,l;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
gameView = new Game(this);
setContentView(gameView);
}
public class Game extends SurfaceView implements Runnable {
Canvas canvas;
SurfaceHolder ourHolder;
Thread ourThread = null;
boolean isRunning = true;
Player[] player = new Player[3];
public Game(Context context) {
super(context);
ourHolder = getHolder();
ourThread = new Thread(this);
ourThread.start();
for(int i=0; player.length < i; i++){
player[i] = new Player(context);
}
}
public void run() {
while(isRunning) {
if(!ourHolder.getSurface().isValid())
continue;
canvas = ourHolder.lockCanvas();
canvas.drawRGB(200, 200, 200);
for (int i = 0; player.length < i; i++){
player[i].draw(canvas);
player[i].move();
}
ourHolder.unlockCanvasAndPost(canvas);
}
}
}
}
А вот игрок класса:
public class Player {
Bitmap base;
float x = (float) (Math.random()*200);
float y = (float) (Math.random()*200);
float e = (float) (Math.random()*200);
float r = (float) (Math.random()*200);
public Player(Context context) {
super();
base = BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_launcher);
}
public void draw(Canvas canvas) {
if(x > e-5 && x < e+5 && y > r-5 && y < r+5){
e = (float) (Math.random()*canvas.getWidth());
r = (float) (Math.random()*canvas.getHeight());
}
canvas.drawBitmap(base, x - base.getWidth()/2, y - base.getHeight()/2, null);
}
public void move() {
//Here's just the code that makes the bitmap move.
}
}
Как вы, возможно, видели, переменные «e» и «r» создают случайные значения каждый раз, когда координаты растрового изображения (x и y) приближаются к ним, а затем переменные «x» и «y» увеличивают или уменьшают их значения, чтобы соответствовать «e», и "r".
Теперь я хочу, чтобы переменные «x» и «y» взаимодействовали с переменными «x» и «y» других экземпляров, чтобы они не перекрывались. Есть ли способ сделать это?
спасибо.
Google Fu + "ограничивающая коробка" -> ??? -> прибыль. – MarsAtomic