Re: [問題] JPanel顯示Graphics的問題

看板java作者 (十年一夢)時間10年前 (2014/05/23 23:09), 10年前編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/3 (看更多)
※ 引述《cicada930614 (喜加達)》之銘言: : 各位好,初次在JAVA版發文 : 如有疏漏煩請指正,感謝 : 小弟最近在練習寫2048,我將整個遊戲切成 : Game:遊戲主體,主要判斷遊戲開始/結束和輸贏判定 : gameBoard:遊戲盤 : Tile:字板 : https://github.com/cicadandrew/JAVAfinal2048 : github : 小弟現在遇到的問題在於,GameBoard的圖像無法顯示 : 我嘗試過將gameBoard extends JPanel並進一步覆寫paint : 結果圖出現,但位置卻被強制置中 : 而將Tile和GameBoard的畫圖一併寫入Game之中,但我不想讓Game太肥 : 而在creatImage中置入System.out.println("check") : 我發現該段有被執行,但圖卻不如預期出現 : 請問是我對JFrame/ JPanel 和畫圖的過程中有什麼錯誤的使用嗎? : 我自認邏輯上沒問題,但無法解決這問題 : 謝謝各位高手解惑,感激不盡 稍微瞄過程式碼,雖沒有去了解細節,但是已可以確定 Grame::run() method 實作 是不正確的。 Game 是整個遊戲視覺上的窗口,遊戲的畫面是呈現在這個 component。而遊戲畫面 的繪製是由 Game::render() 來負責(會擴散到其他零件),如果 Game::run 的演算 法會導致 Game::render method 不被執行到,那麼你就什麼都看不到(只有一個空 視窗)。 只能建議你再仔細檢視 Game::run method 的實作,然後把你的 engine 演算法正確 做出來。(我尚不清楚 Game::run 的邏輯,但是看到 while loop 後的 if statement 就知道不對勁了,這個 if statement 內所做的事可說沒有任何意義) 試著先從讓 Game 畫布以約 30 fps 來更新,先確定 rendering 方面的實作是正確, 再慢慢配合遊戲流程修改。 把 Game::run 改成這樣: public void run() { while (true) { render(); try { Thread.sleep(30); } catch (InterruptedException ex) { } } } 如果 rendering 部分是正確的,你應該要看到一些基本的畫面(board/背景之類)。 另外跟你目前要解決的問題無關,許多零件都會先準備 BufferedImage 來做畫,在 rendering 時再把這個畫(image)輸出,這是不必要的。假如你是為了避免 graphics context 在多個零件中傳遞時,被零件搞亂掉,你可以在傳遞 graphics context 時 使用副本(Graphics::create(...))。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 218.166.242.159 ※ 文章網址: http://www.ptt.cc/bbs/java/M.1400857781.A.8A3.html ※ 編輯: sbrhsieh (218.166.242.159), 05/23/2014 23:17:18
文章代碼(AID): #1JVsIrYZ (java)
文章代碼(AID): #1JVsIrYZ (java)