Syt*_*the 2 java processing case switch-statement
在处理语言中有一些问题,它说case表达式必须是常量,但我可以发誓它们是.我不知道我在这里做错了什么.有人有提示吗?
int gameState;
static int MENU = 0;
static int GAME = 1;
static int OPTIONS = 2;
void setup() {
screenSizex = 960;
screenSizey = 640;
size(screenSizex, screenSizey);
gameState = MENU;
}
void draw(){
switch(gameState) {
case MENU:
//does menu stuff
break;
case OPTIONS:
//does options stuff
break;
case GAME:
//does game stuff
break;
default:
break;
}
}
void mousePressed() {
if (//over some object) {
gameState = GAME;
}
else if (//over some object) {
gameState = OPTIONS;
}
else if (//over some object) {
exit();
}
}
Run Code Online (Sandbox Code Playgroud)
static只是使字段属于类而不是类的实例.可以随时修改静态字段,因此它不是常量.final如果希望将字段视为常量值,则需要创建字段:
static final int MENU = 0;
static final int GAME = 1;
static final int OPTIONS = 2;
Run Code Online (Sandbox Code Playgroud)
将字段标记为static final它们都存在于类级别(它们不属于类的任何特定实例,也不需要实例来访问值)并且在初始化后无法修改(有效地使值保持不变) ).
但是,我认为这对你来说真的是一个使用枚举类型的好地方.这是我如何改变游戏状态声明:
GameState gameState;
enum GameState {
MENU, GAME, OPTIONS
}
Run Code Online (Sandbox Code Playgroud)
以下是您需要做的其余代码才能使用它:
void setup() {
screenSizex = 960;
screenSizey = 640;
size(screenSizex, screenSizey);
gameState = GameState.MENU;
}
void draw(){
switch(gameState) {
case MENU:
//does menu stuff
break;
case OPTIONS:
//does options stuff
break;
case GAME:
//does game stuff
break;
default:
break;
}
}
void mousePressed() {
if (/*over some object*/) {
gameState = GameState.GAME;
}
else if (/*over some object*/) {
gameState = GameState.OPTIONS;
}
else if (/*over some object*/) {
exit();
}
}
Run Code Online (Sandbox Code Playgroud)
基本上我必须改变的是GameState.在所有出现之前添加一个限定符MENU,GAME并且OPTION除了case语句中的那些之外,因为编译器可以GameState根据表达式中使用的表达式来推断那些是值switch.使用a enum而不是a int具有额外的优点,即它将值限制gameState为仅3个有效值,而不是整个整数范围.
| 归档时间: |
|
| 查看次数: |
8591 次 |
| 最近记录: |