Java: проблема с операцией Keystate - PullRequest
1 голос
/ 07 апреля 2011

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

Изображение представляет собой таблицу спрайтов, которая настроена как массив (т. Е. Первый экран имеет индекс массива 0 и т. Д ...)

Я могу измениться, когда нажимаю клавиши ВВЕРХ, ВЛЕВО и ВВОД, но программа не будет отображать правильное изображение при нажатии клавиши ВНИЗ.

В конце концов я хочу отменить нажатие клавиш со стрелками и заменить их номерами (телефонные клавиши) 4, чтобы вернуться, 1,2,3, чтобы перейти на определенные страницы, и войти, чтобы перейти на следующую страницу, если есть еще информация на конкретной странице.

    private void actOnKeyStates(int k) {
        if ((k & DOWN) != 0) {
            Title = false;
            HowToPlay = true;
            Controls = false;
            About = false;
        }
        if ((k & UP) != 0) {
            Title = false;
            HowToPlay = false;
            Controls = true;
            About = false;
        }

        if ((k & LEFT) != 0) {
            Title = true;
            HowToPlay = false;
            Controls = false;
            About = false;
        }

        if ((k & FIRE_PRESSED) != 0) {
            Title = false;
            HowToPlay = false;
            Controls = false;
            About = true;
        }
        update();

    }

    public void update() {
        if (Title) {
            Screen.setFrame(0);
        }
        if (HowToPlay) {
            Screen.setFrame(1);
        }
        if (Controls) {
            Screen.setFrame(4);
        }
        if (About) {
            Screen.setFrame(5);
        }

    }

Буду признателен за любые советы по этому вопросу.

1 Ответ

0 голосов
/ 27 января 2012

Сначала я думаю, что было бы лучше, если бы вы установили состояние для своей игры, а не просто использовали все большее число логических значений. Такие как это:

public enum ScreenState { Title, HowToPlay, Controls, About }    
private ScreenState currentScreen = ScreenState.Title;

private void actOnKeyStates(int k) {
    if ((k & DOWN) != 0) {
        currentScreen = ScreenState.HowToPlay;
    }

    if ((k & UP) != 0) {
        currentScreen = ScreenState.Controls;
    }

    if ((k & LEFT) != 0) {
        currentScreen = ScreenState.Title;
    }

    if ((k & FIRE_PRESSED) != 0) {
        currentScreen = ScreenState.About;
    }

    update();
}

public void update() {
    switch(currentScreen) {
        case Title:       
            Screen.setFrame(0);
            break;
        case HowToPlay:
            Screen.setFrame(1);
            break;
        case Controls:
            Screen.setFrame(4);
            break;
        case About:
            Screen.setFrame(5);
            break;
     }
 }

Второе, что вам нужно сделать, это подтвердить, что k & DOWN выполняется правильно при нажатии стрелки ВНИЗ. Также убедитесь, что искомое изображение правильно размещено в позиции 1 на вашем листе спрайта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...