我在将屏幕更改为我想要显示的图像时遇到问题。
图像是一个 spritesheet,它被设置为一个数组(即第一个屏幕位于数组索引 0 等...)
按UP键、LEFT键和ENTER键可以改变,但按DOWN键程序不会显示正确的图像。
我最终想放弃按箭头键并用它们代替数字(电话号码键) 4 返回,1,2,3 转到某些页面,并用 Enter 转到下一页(如果有更多页面)特定页面上的信息。
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);
}
}
如果您对此事有任何建议,我将不胜感激。
最佳答案
首先,我认为如果您为游戏建立一个状态,而不是仅仅使用越来越多的 boolean 值,会更好。比如这样:
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 正在正确执行。还要确认您要查找的图像已正确放置在 Sprite 表中的位置 1
中。
关于Java : Keystate operation issue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5583769/