2009-04-17 48 views
0

我正在製作一個多線程的pacman遊戲。多個動畫JPanels - 只有最後一個添加到JFrame顯示

有一個PacmanController類,它擴展了JFrame,一個擴展了JPanel的Maze類,一個在它自己的線程中運行並擴展JPanel的Pacman類,以及一個在它自己的線程中運行並擴展JPanel的Ghost類。每個線程(pacman和每個Ghost)不斷重新繪製自己並調用maze.repaint()。

當我將迷宮添加到框架時,它顯示得很好,如果我添加了pacman,它仍然顯示並且動畫很好。

但是,當我在pacman之後將Ghost添加到幀中時,出現鬼並且pacman消失。如果我切換添加pacman和ghost的順序,則情況正好相反,即只顯示pacman中的一個或每個ghost的實例 - 最後添加一個。

如:

add(maze); 
add(pacman); 
add(ghostA); 

只有迷宮ghostA出現?

我意識到這與JFrames BorderLayout有關,即只有一個組件可以添加到中心區域,但不知道如何修復它。我曾嘗試在EAST WEST等地添加pacman和ghosts,但這不起作用。

我也曾嘗試

maze.add(pacman); 
add(pacman); //etc 

但是這也不能工作。

對不起,很長的文章,任何幫助,非常感謝。我不能發佈任何代碼,因爲代碼太長,並且遍佈許多類。

非常感謝!

回答

0

第一張:從Swing中的多個線程重新繪製是麻煩的處方。更好的方法是從主遊戲類更新並將對象傳遞給所有參與者來繪製自己(我確定還有其他模式,但我在一段時間內沒有做過這種事情)。

第二張:你的演員(pacman,ghosts)不應該是JPanels。這是更糟糕的麻煩的祕訣。讓它們擴展一個Actor類或其他東西,但它們不應該是Swing組件。

我意識到這並不直接回答你的問題,但如果你正確設計你的遊戲,你的一些問題將會消失。網絡上有很多關於遊戲設計的教程;我個人不能推薦他們,但Killer Game Programming in Java的前幾章很有希望。


編輯:好吧,我會盡力解決企業的實際問題。

如果您使用BorderLayout,添加多個組件的方法是指定位置:

setLayout(new BorderLayout()); 
add(maze, BorderLayout.CENTER); 
add(pacman, BorderLayout.EAST); 
add(ghostA, BorderLayout.WEST); 

或者(也許更好),你可以增加玩家的迷宮:

setLayout(new BorderLayout()); 
maze.setLayout(new BorderLayout()); 
maze.add(pacman, BorderLayout.EAST); 
maze.add(ghostA, BorderLayout.WEST); 
add(maze, BorderLayout.CENTER); 

現在,雖然這些獲得所有三個組件添加到框架,我仍然不能看到你怎麼能有一個遊戲,其中玩家是JPanel試圖逃脫JPanels
無論如何,如果他們不工作,接下來要做的就是嘗試不同的layout manager

+0

許多食譜麻煩搖擺贊成:-) – Peter 2009-04-17 18:14:07

+0

感謝您的答覆,但是這是一個分配;因此我沒有時間開始重新設計我的程序 - 完全是2000行。我真正想知道的是,我可以使用迄今爲止所做的工作來實現它的工作嗎?兩者都顯示OK,只是不在同一時間 - 所以根據我所描述的,是否有一個快速解決這個問題?歡呼 – Rory 2009-04-17 18:57:44

+0

已經嘗試過沒有成功的人。沒關係,謝謝。 – Rory 2009-04-17 19:20:26

0

您是否將這些面板直接添加到JFrame?如果是這樣,你應該將它們添加到框架的內容窗格,而不是:

getContentPane().add(maze); 
getContentPane().add(pacman); 
getContentPane().add(ghostA); 
0

僅供參考,mmyers是正確的。你將一直在努力,直到最後,它永遠不會正常工作。你會以錯誤的方式去做。通過對其中的一些問題

  • 如何控制吃豆子和鬼的位置/地點工作

    讓我們開始?

  • 你是在設置jpanel的位置,還是你在面板的某個x/y處繪圖?
  • 您是否期望所有3個面板在彼此頂部繪製/渲染?
  • 您是否在每個JPanel中重寫paintComponent()來繪製pacman/ghost /迷宮?
  • 家庭作業的標準是什麼?
  • 它是否必須是多線程的?