проверить столкновение линий и круга в холсте Android

Я пытаюсь проверить столкновения между линиями и кругом, если круг попадает в линию, он сработает, изменив логическое значение на true, и, как только его не коснутся, он изменит его обратно на false. Я использую холст и вид поверхности.

Вот мой код для проверки столкновения, который не сработал и закончился ошибкой:

@Override
public void run() {
while(runnable)
    {
        if(!holder.getSurface().isValid()){
            continue;
        }
        Canvas mCanvas = holder.lockCanvas();
        update(mCanvas);
        values = new Values(mCanvas);
        createPaints();
        drawBackground(mCanvas);
        drawObjects(mCanvas);
        holder.unlockCanvasAndPost(mCanvas);


    }
}

Теперь коллизия обрабатывается в обновлении:

private void update(Canvas c) {
    ball.update(c, checkLinesCollision(values.level1, ball.getX(), ball.getY()));
  //takes a canvas, and a boolean
}

boolean checkLinesCollision(float[] f,float x,float y){
    int c = 0;
    for(int i = 0; i < f.length; i+=4){
        float x1 = f[i];
        float y1 = f[i+1];
        float x2 = f[i+2];
        float y2 = f[i+3];

        if (x> x1 && x<x2 && y>y1 && y>y2){

            c++;

        }
    }
        if(c>0){return true;}else{return false;}

}

значения для уровня

 float yLow = c.getHeight()-c.getHeight()/4;

    level1 = new float[]{0,yLow,c.getWidth(),yLow,
                      40,c.getHeight()/2,300,c.getHeight()/2};

функция обновления мяча:

public void update(Canvas c, boolean b) {

    if(b){

        dy=-dy;
        b = false;
    }
    y -= dy;
    dy--; 
}

Теперь согласно logcat проблема в основной функции обновления.
Я думаю, что использую не ту функцию, что я могу сделать, чтобы это исправить?

Спасибо!


person Baruch    schedule 31.07.2012    source источник
comment
Что именно говорит logcat?   -  person 0gravity    schedule 31.07.2012
comment
@0gravity, что у меня проблема с запуском Android, точное место - ball.update(c, checkLinesCollision(values.level1, ball.getX(), ball.getY()));   -  person Baruch    schedule 31.07.2012


Ответы (1)


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

person Baruch    schedule 31.07.2012