Java If语句中未更改布尔值
我有两个类:GameScreen.java和KeyButton.java。有三个按钮是GameScreen类中引用的布尔值(无论是否按下),我想将它们与KeyButton类中的值进行比较。以下是相关代码: GameScreen.java:Java If语句中未更改布尔值,java,android,Java,Android,我有两个类:GameScreen.java和KeyButton.java。有三个按钮是GameScreen类中引用的布尔值(无论是否按下),我想将它们与KeyButton类中的值进行比较。以下是相关代码: GameScreen.java: private void checkButtons() { // Log.d("GameScreen","Note and Bar Intersected"); KeyButton keybutton = new KeyButton(); if (B1
private void checkButtons() {
// Log.d("GameScreen","Note and Bar Intersected");
KeyButton keybutton = new KeyButton();
if (B1Pressed == keybutton.getB1() && B2Pressed == keybutton.getB2() && B3Pressed == keybutton.getB3()) {
// Log.i("GameScreenTest", "Correct");
score++;
} else {
// Log.i("GameScreenTest - Result", "Wrong");
// Log.i("GameScreenTest - Button Pressed", Boolean.toString(B1Pressed));
// Log.i("GameScreenTest - Button Required", Boolean.toString(keybutton.getB1()));
}
}
KeyButton.java:
public class KeyButton {
public boolean B1 = false;
public boolean B2 = false;
public boolean B3 = false;
Rectangles Rectangles = new Rectangles();
{
//C major
if (ScalesScreen.scaleType.equals("C")) {
//C
if (GameScreen.intersected == Rectangles.rectangle1) {
B1 = false;
B2 = false;
B3 = false;
}
//D
if (GameScreen.intersected == Rectangles.rectangle2) {
B1 = true;
B2 = false;
B3 = true;
}
//E
if (GameScreen.intersected == Rectangles.rectangle3) {
B1 = true;
B2 = true;
B3 = false;
}
//F
if (GameScreen.intersected == Rectangles.rectangle4) {
B1 = true;
B2 = false;
B3 = false;
}
...
public boolean getB1() {
// TODO Auto-generated method stub
//Log.d("Key 1", Boolean.toString(B1));
return B1;
}
public boolean getB2() {
// TODO Auto-generated method stub
//Log.d("Key 2", Boolean.toString(B2));
return B2;
}
public boolean getB3() {
// TODO Auto-generated method stub
//Log.d("Key 3", Boolean.toString(B3));
return B3;
}
出于某种原因,B1、B2和B3值在游戏屏幕代码中返回false(来自keybutton.getB1()),导致每次未按下按钮时分数增加。因此,出于某种原因,布尔值没有被更改为KeyButton类中应该有的值。我能做些什么来解决这个问题
增加:
for (Rect rect : rectangles) {
if(Rect.intersects(rect, bar)) {
// Log.d("GameScreen", "intersected");
intersected = rect;
// Log.d("Intersected", intersected.toString());
checkButtons();
}
}
每当调用CheckButton方法时,您都在创建一个新的KeyButton对象。在这种情况下,每次都会重置标志
KeyButton keybutton = new KeyButton();
而不是使用Keybutton的全局实例或将Keybutton作为单个实例。这样旗帜就会持续存在
public class KeyButton
{
public boolean B1 = false;
public boolean B2 = false;
public boolean B3 = false;
// Singleton
private static KeyButton sInstance;
private KeyButton () {}
public static synchronized KeyButton getInstance()
{
if (sInstance == null)
{
sInstance = new KeyButton();
}
return sInstance;
}
..
}
四个交叉点检查是否意外嵌套在
if(scaleScreen.scaleType.equals(“C”))
块中?如果按下所有按钮或其中任何一个按钮,布尔值是否会更改pressed@ShashankUdupa它们应该根据相交矩形(添加的代码部分)的不同而变化与在不同类中定义的矩形(称为矩形,不会更改)相同。keyButton.java
中的代码似乎在方法之外有语句(即如果方法中不包含语句…)-我很惊讶您没有得到编译错误。或者您是否遗漏了更多的代码?很难判断何时调用将B1、B2、B3设置为期望值的代码。@user2712795查看下面的Sree解决方案,我相信这基本上是正确的答案。我将此添加到我的代码中,并将代码更改为KeyButton KeyButton=KeyButton.getInstance()代码>但所有布尔值仍返回false。