在我的應用程式中打開選單時,它會根據游戲的狀態(暫停或未啟動)顯示一個額外的選項,但是按鈕應該做什么的控制變數總是回傳為 false。我嘗試將 if 陳述句拆分為單獨的陳述句并執行接受性能影響但輸出沒有發生變化的處理,將滑鼠懸停在 btnMenu 方法 onClick 中的 else if 陳述句上時它說:
條件“!暫停”在達到時始終為“真”
相關代碼如下:
Button btnStart;
Button btnMenu;
Button btnQuit;
Button btnShop;
Button btnSettings;
ImageView swipeDetector;
boolean menuToggle = false;
int gameRunning = 0;
boolean paused = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//calling object from activity_main.xml
btnStart = (Button) findViewById(R.id.startButton);
btnMenu = (Button) findViewById(R.id.menuButton);
btnQuit = (Button) findViewById(R.id.quitBtn);
btnShop = (Button) findViewById(R.id.shopButton);
btnSettings = (Button) findViewById(R.id.settingsBtn);
swipeDetector = (ImageView) findViewById(R.id.swiperReader);
btnQuit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(gameRunning == 1) {
gameRunning = 0;
menuToggle = false;
paused = false;
//set game variables back to defaults
btnQuit.setVisibility(View.GONE);
btnSettings.setVisibility(View.GONE);
btnShop.setVisibility(View.VISIBLE);
btnStart.setVisibility(View.VISIBLE);
}
}
});
btnStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
gameRunning = 1;
menuToggle = false;
paused = false;
btnStart.setVisibility(View.GONE);
btnShop.setVisibility(View.GONE);
}
});
//broken, for some reason gameRunning always == 0
btnMenu.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (gameRunning == 1){
paused = true;
}
if (!menuToggle && paused){
btnStart.setVisibility(View.GONE);
btnSettings.setVisibility(View.VISIBLE);
swipeDetector.setVisibility(View.GONE);
btnQuit.setVisibility(View.VISIBLE);
menuToggle = true;
//broken if statement
}else if(!menuToggle && !paused){
btnStart.setVisibility(View.GONE);
btnSettings.setVisibility(View.VISIBLE);
swipeDetector.setVisibility(View.GONE);
menuToggle = true;
} else {
paused = false;
btnSettings.setVisibility(View.GONE);
btnQuit.setVisibility(View.GONE);
btnStart.setVisibility(View.GONE);
swipeDetector.setVisibility(View.VISIBLE);
if(gameRunning == 0) {
btnStart.setVisibility(View.VISIBLE);
}
menuToggle = false;
}
}
});
該程式沒有問題,因為我在大學時與一些朋友一起使用代碼功能,當前版本的應用程式不會上傳到虛擬設備,因此經過數小時試圖找到一些非常基本的代碼的解決方案后,它變成了發現這是 Floobits 代碼一起出現的問題。對困惑感到抱歉。
第一條評論中提到的解決方案是,這是說明我到達 else if 陳述句的時間唯一可能的情況是該值將是真的,而不是該值在整個代碼中始終為真。
uj5u.com熱心網友回復:
您正在宣告一個必須為真的布爾條件,!menuToggle
從if
and中洗掉else if
,它變得更加清晰。通常,當我遇到這些情況時,我會先花時間清理我的代碼,這通常可以幫助我解決問題。這是最后onClick
一種清理方法的示例。
public void onClick(View view) {
if (!menuToggle) {
btnStart.setVisibility(View.GONE);
btnSettings.setVisibility(View.VISIBLE);
swipeDetector.setVisibility(View.GONE);
menuToggle = true;
if(paused) {
btnQuit.setVisibility(View.VISIBLE);
}
} else {
btnSettings.setVisibility(View.GONE);
btnQuit.setVisibility(View.GONE);
btnStart.setVisibility(View.GONE);
swipeDetector.setVisibility(View.VISIBLE);
if(gameRunning == 0) {
btnStart.setVisibility(View.VISIBLE);
}
paused = false;
menuToggle = false;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/470514.html