OnTouch растровое наложение

1

Я разрабатываю игру, где на экране запускается другое растровое изображение (SurfaceView). Поскольку у них разная скорость, бывает, что иногда накладываются два символа, один за другим. Я использовал функцию OnTouch, чтобы поймать момент, когда игрок коснется персонажа. Однако, когда два символа накладываются друг на друга, я всегда "прикасаюсь" к тому, который стоит позади, я никогда не касаюсь другого перед ним. Зачем? Как я могу изменить это поведение? Поскольку я касаюсь одного впереди, это действительно раздражает, что я всегда касаюсь другого позади. Я надеюсь, что проблема понятна.

Спасибо!

Изменить: это моя функция OnTouchEvent:

@Override
public boolean onTouchEvent(MotionEvent event){
    synchronized (getHolder()) {

        boolean chibi_toccato = false;

        if (!blocco_tocco){

//Здесь у меня есть структура (вектор), содержащая чибис, который будет показан

        for (int i = (mChibiVector.size() - 1); i >= 0; i--) {
            Chibi chibi = mChibiVector.elementAt(i);


        if (event.getAction() == MotionEvent.ACTION_DOWN) {                    

            if (!chibi_toccato){    

//touch - это флаг, который указывает, были ли затронуты чиби до

                if (chibi.touched) {

//Если я касаюсь растрового изображения лодки (где-то на экране), чиби будет в безопасности

                    int navexend = posiz_nave_x + thread.mNave.getWidth();
                    int naveyend = posiz_nave_y + thread.mNave.getHeight();
                    if ((int) event.getX() >= posiz_nave_x && 
                            (int) event.getX() <= navexend &&
                            (int) event.getY() >= posiz_nave_y && 
                            (int) event.getY() <= naveyend){
                        chibi.chibisalvo = true;


                        thread.calcola_vel_x(chibi);
                        thread.calcola_vel_y(chibi);
                        } else {
                            chibi.touched = false;

                            int temp_chibi_y = chibi.getCoordinate().getY();

                            chibi.getCoordinate().setY(
                                    temp_chibi_y +
                                    chibi.getBitmapDimensions()[1]);

                        }
                    chibi_toccato = true;
                } else {
                // Here I check if a chibi is touched:  

                    chibi = thread.checkTouched(chibi, (int) event.getX(),
                            (int) event.getY());

                    if (chibi.touched){
// If the chibi is touched, I save the X-Y info:

                        chibi.getCoordinate().setTouchedX((int) event.getX());
                        chibi.getCoordinate().setTouchedY((int) event.getY());


                        int temp_chibi_y = chibi.getCoordinate().getY();

                        chibi.getCoordinate().setY(
                                temp_chibi_y -
                                chibi.getBitmapDimensions()[1]);

                        chibi_toccato = true;
                        }                       
                    } 
                }
            } else if (event.getAction() == MotionEvent.ACTION_UP) {

                if (chibi.touched){

                    chibi_toccato = false;

                int navexend = posiz_nave_x + thread.mNave.getWidth();
                int naveyend = posiz_nave_y + thread.mNave.getHeight();
                if ((int) event.getX() >= posiz_nave_x && 
                        (int) event.getX() <= navexend &&
                        (int) event.getY() >= posiz_nave_y && 
                        (int) event.getY() <= naveyend){
                    chibi.chibisalvo = true;

                    thread.calcola_vel_x(chibi);
                    thread.calcola_vel_y(chibi);
                    } 
                }
            }
        }
        }       
    }       
    return true;
}
  • 0
    Пожалуйста, предоставьте фрагмент кода, где вы определяете символ, к которому вы прикоснулись. Очевидно, в этом и заключается ошибка, и, не видя ее, трудно угадать ответ.
Теги:
bitmap
ontouchevent

1 ответ

0
Лучший ответ

Ну, через некоторое время, наконец, я получил проблему. Проблема была в цикле for:

for (int я = (mChibiVector.size() - 1); я >= 0; я -)

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

Надеюсь, что это может быть полезно для других.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню