Обнаружение столкновения двух объектов в Android - PullRequest
0 голосов
/ 18 ноября 2011

Я уже опубликовал вопрос по этой теме ... но не получил ответа. Я играю в игру. В этом приложении я должен обнаружить столкновение двух объектов на холсте.Здесь вставлен класс объектов.

     public class Droid {

private Bitmap bitmap;  // the actual bitmap
private int x;          // the X coordinate
private int y;          // the Y coordinate
private boolean touched;    // if droid is touched/picked up
private Speed speed;    // the speed with its directions

public Droid(Bitmap bitmap, int x, int y) {
    this.bitmap = bitmap;
    this.x = x;
    this.y = y;
    this.speed = new Speed();
}

public Bitmap getBitmap() {
    return bitmap;
}
public void setBitmap(Bitmap bitmap) {
    this.bitmap = bitmap;
}
public int getX() {
    return x;
}
public void setX(int x) {
    this.x = x;
}
public int getY() {
    return y;
}
public void setY(int y) {
    this.y = y;
}

public boolean isTouched() {
    return touched;
}

public void setTouched(boolean touched) {
    this.touched = touched;
}

public Speed getSpeed() {
    return speed;
}

public void setSpeed(Speed speed) {
    this.speed = speed;
}


public void draw(Canvas canvas) {
    canvas.drawBitmap(bitmap, x - (bitmap.getWidth() / 2), y - (bitmap.getHeight() / 2), null);
}

/**
 * Method which updates the droid's internal state every tick
 */
public void update() {
    if (!touched) {
        x += (speed.getXv() * speed.getxDirection()); 
        y += (speed.getYv() * speed.getyDirection());
    }
}


/**
 * Handles the {@link MotionEvent.ACTION_DOWN} event. If the event happens on the 
 * bitmap surface then the touched state is set to <code>true</code> otherwise to <code>false</code>
 * @param eventX - the event's X coordinate
 * @param eventY - the event's Y coordinate
 */
public void handleActionDown(int eventX, int eventY) {
    if (eventX >= (x - bitmap.getWidth() / 2) && (eventX <= (x + bitmap.getWidth()/2))) {
        if (eventY >= (y - bitmap.getHeight() / 2) && (y <= (y + bitmap.getHeight() / 2))) {
            // droid touched
            setTouched(true);
        } else {
            setTouched(false);
        }
    } else {
        setTouched(false);
    }

}
}

Я создаю 5 объектов дроидов.4 из них постоянно перемещаются по холсту, а 1 контролируется пользователем.Я хочу обнаружить событие, в котором эти 4 движущихся объекта сталкиваются с контролируемым пользователем объектом.Я прочитал много уроков, но пока не нашел решения. Пожалуйста, кто-нибудь, помогите мне ...

Ответы [ 3 ]

1 голос
/ 18 ноября 2011

Гораздо проще использовать AndEngine, и это упростит вам эти задачи.

1 голос
/ 14 мая 2012

Как правило, упрощение обнаружения коллизий с использованием неточного представления обычно является хорошей идеей, поскольку с ним легко работать и реализовывать, а скорость в целом хорошая.Для такого решения обнаружение столкновений с ориентированными по оси ограничивающими прямоугольниками или, возможно, кругами, должно работать нормально.Для более сложных решений доступны решения на основе многоугольников, но их сложнее использовать.

Если вам нужно более точное обнаружение столкновений, например обнаружение столкновений между двумя изображениями, вам необходимо точное обнаружение столкновений с точностью до пикселя.Как правило, это действительно сложно сделать эффективно, поэтому рекомендуется использовать существующую библиотеку.

Поскольку вы работаете с Java и, похоже, используете растровое изображение, AndEngine , как рекомендовано Reno, или PoxelColl должен сделать свое дело.Если вам нужны базовые преобразования, такие как вращение и масштабирование, я рекомендую PoxelColl.

0 голосов
/ 18 ноября 2011

Вы должны использовать библиотеку, которая предоставляет функции для обнаружения столкновений спрайтов. Попробуйте прибегнуть к помощи "столкновения спрайтов Android".

...