Справка по Java-программированию и разработка Android - PullRequest
1 голос
/ 23 июля 2011

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

Это мой метод if:

int RED = 0;
int GREEN = 1;
Graphics g = game.getGraphics();
int len = touchEvents.size();

if (RED == 0) {
    ready = Assets.readybtntwo;
}

for(int i = 0; i < len; i++) {
    TouchEvent event = touchEvents.get(i);

    if(event.type == TouchEvent.TOUCH_UP){
        updateWaiting(touchEvents);
        RED +=1;

        if (RED == 0)
            ready = Assets.readybtntwo;

        if(RED == 1)
            ready = Assets.readybtngreentwo;
    }

    g.drawPixmap(ready, 0, 0);
}

Извините, я использую фреймворк, созданный из книги, начинающей игры для Android. Но это не должно иметь значения, я хочу, чтобы изображение осталось навсегда и завершило цикл if.

1 Ответ

1 голос
/ 23 июля 2011

У вас здесь логическая ошибка. Похоже, переменная RED является локальной для вашего метода, если весь приведенный выше код находится внутри обработчика событий касания. Это означает, что когда пользователь прикасается к экрану каждый раз, когда он сбрасывается в 0, а затем снова становится 1. Это, вероятно, не то, что вы хотите.

Причина, по которой он отображается только в том, что g.drawPixmap будет либо отправлять элемент в очередь отрисовки, либо немедленно отображать его. Этот метод рисования кнопки может быть нарисован только когда у вас есть сенсорное событие!

Вместо этого вы можете иметь логическое значение drawGreenReadyButton в качестве члена класса, т.е.

private boolean drawGreenReadyButton = false;

Тогда вы можете изменить это внутреннее выражение if на следующее:

if(event.type == TouchEvent.TOUCH_UP){
    updateWaiting(touchEvents);
    drawGreenReadyButton = true;
}

И в вашем основном цикле рендеринга, а не в обработчике сенсорного события:

if(drawGreenReadyButton) {
    g.drawPixmap(Assets.readybtngreentwo, 0, 0);
} else {
    g.drawPixmap(Assets.readybtntwo, 0, 0);
}

Также рассмотрите возможность использования TouchEvent.TOUCH_DOWN вместо TouchEvent.TOUCH_UP, чтобы кнопка отображалась зеленым, как только они касаются экрана, а не когда они поднимают палец вверх.

...