所以我正在製作圖形卡遊戲。每張卡片都是一個JPanel,帶有一個按鈕和兩個與其關聯的圖像。我有一個翻轉方法,這是我點擊卡片時在動作偵聽器中首先呼叫的方法。未按順序發生Java圖形事件我期望他們
public void flip()
{
if(b1.getIcon() == card2) b1.setIcon(card1);
else b1.setIcon(card2);
revalidate();
repaint();
}
然而,由於某些原因,卡犯規翻轉(意味着圖標不改變),直到某一點後,我調用此方法。例如,當我在調用flip之後放置一個Thread.sleep時,我會認爲我的程序在翻轉完成後會暫停,但它不會!它睡眠的圖像尚未切換,並且只在睡眠時間結束後的某個點進行切換。
當我在這個紙牌遊戲中有一個人類玩AI時,由於AI事件發生在屏幕上翻牌前發生,即使我在執行任何AI代碼之前調用flip(),這會導致一些主要問題。任何人都可以告訴我這裏發生了什麼?
你確定你可以在這裏用'=='運算符來比較'b1.getIcon()'和'card2'嗎?我知道我在 – yiwei
之前遇到了問題。是的,翻轉總是最終發生,我認爲這意味着==確實起作用。我的問題是,屏幕上的圖像直到我期待它們纔會切換。 –
一般注意事項:除非一個變量是一個基元,否則_always_使用'.equals()'進行比較,即使您沒有重寫它 - 如果必要的話,它會使實現更改更簡單。我建議在任何可能的時候總是使用花括號('{}'),而不僅僅是在需要時;它可以使理解控制流程變得更容易一些(特別是如果您沒有正確縮進代碼)。另外,如果可能的話,不要僅僅命名變量'card1','card2' - 使用諸如'face'和'back'之類的東西,或者其他東西(你是否必須分開卡片或者什麼?)。 –