在我的应用程序(这是一个Android游戏)中,我有一种方法可以检查玩家是否还活着,如果不是,则运行动画并结束游戏。
根据玩家的输家方式,目前有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.......
在switch语句中,无法识别我的英雄对象吗?为什么是这样?如果无论如何我都键入它(case hero.HITBIRD),则会出现此错误:
case表达式必须是常量表达式
显然,出于可读性考虑,我宁愿使用我设置的变量名,而不是原始数值。
最佳答案
您只能在情况下使用常量。您的变量是实例变量,而不是常量。每个英雄都有这些变量的副本。它们应声明为:
static final int FELLOFFSCREEN = 0;
static final int HITBIRD = 1;
static final int SQUASHED = 2;
您应该使用类名而不是对象来访问它们:
case Hero.HITBIRD {
(假设班级名称为Hero)。
请注意,您可能应该用枚举替换这些常量:
public enum HeroDeathCause {
FELL_OFF_SCREEN, HIT_BIRD, SQUASHED
}
这是更安全的类型,并且更具自我描述性。
关于java - Java Switch语句困惑,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26703620/