В моем приложении (которое является игрой для Android) у меня есть метод, который проверяет, жив ли плеер, а если нет, запускает анимацию, и игра закончена.Java Switch statement confusion
В настоящее время доступно 3 различных анимации в зависимости от того, как проигрывает проигрыватель.
Так, например, они могут упасть с экрана, поразить птицу или получить сквош от чего-то, падающего с неба. У каждого есть другая анимация.
В общем, что я делаю это:
Когда игрок проигрывает, я установил метод, с помощью которого это произошло, так, например, если они были поражены птицы:
hero.setKilledBy(hero.HITBIRD);
Тогда я могу это сделать, переключившись в мой метод checkGameOver(). Однако я смущен. Я должен проверить это следующим образом: (Обратите внимание, что в моем случае, я должен поставить 0, 1, 2):
switch(hero.killedBy()){
case 0: {
fallOffScreenAnimation();break;
}
case 1: {
hitBirdAnimation();break;
}
case 2: {
squashedAnimation();
}
}
в классе моего героя объекта, у меня есть следующие методы
int killedBy;
final int FELLOFFSCREEN = 0;
final int HITBIRD = 1;
final int SQUASHED = 2;
int killedBy(){
return killedBy;
}
int setKilledBy(int value){
killedBy = value;
}
Итак, мой вопрос, почему я не могу сделать что-то вроде этого:
switch(hero.killedBy()){
case hero.HITBIRD {
fallOffScreenAnimation();break;
}
//............... and so on.......
в отчете коммутатора, мой герой объект, не признается? Почему это? Если я просто ввести его в любом случае (случай hero.HITBIRD), я получаю эту ошибку:
case expressions must be constant expressions
Очевидно, что для удобства чтения, я бы предпочел, чтобы использовать имена переменных, которые я указал, а не исходных числовых значений ......
Отметьте это http://stackoverflow.com/questions/3827393/java-switch-statement-constant-expression-required-but-it-constant –
Спасибо @BorisIvanov, я быстро прочитал. Я не уверен, что понимаю, что означает «использовать инициализатор»? Было бы это означать - объявить его как (например) int FELLOFFSCREEN, а затем установить его где-нибудь - так, FELLOFFSCREEN = 0? Если это так, я предполагаю, что не могу использовать последнее ключевое слово? - thanks – Zippy
Можете ли вы попробовать первый публичный окончательный статический int XXX = 1; или ENUM? –