簡體   English   中英

OO游戲設計問題

[英]OO game design question

我正在用Java編寫一個簡單的游戲,但我正在嘗試用一個漂亮干凈的設計做到'正確'而且沒有黑客攻擊。

我有兩個類GamePanel接收點擊和按鍵, Model包含所有實體並負責更新。 模型需要知道用戶鼠標的位置,但我無法決定采用“正確”的方法。

Model和內部的每個Entity是否應該保持對GamePanel的引用,或者只是緩存最后已知的鼠標位置並定期從GamePanel接收更新。 使用第一個選項創建模型時,需要為GamePanel提供引用,第二個鼠標位置將作為參數發送到World.update()方法。

這些解決方案似乎都不優雅,所以我想知道是否有一種“正確”的方式來做到這一點,我已經錯過了。

謝謝,本。

在我看來,這取決於你的課程如何互動。 鼠標位置的變化是否觸發了Model類中的實體? 或者Model類是否獨立於GamePanel並且僅適用於Mouse位置的當前值?

如果后來和那個案子我同意傑夫在我面前所說的話。 在創建它時將GamePanel上的句柄傳遞給Model類,並讓每個實體在需要時使用句柄來訪問鼠標位置。 這樣就總是使用更新的鼠標位置。

如果前者我建議使用Observers讓Model類知道鼠標位置值何時發生變化。 然后Model類可以使用相同的設計(即讓Model類始終在GamePanel類上有句柄)並訪問GamePanel中的當前值。

總結我對你的問題的答案,我認為只有邏輯和符合OO概念才能讓GamePanel保持鼠標位置的值,讓其他類使用GamePanel實例訪問該信息。

謝謝,羅漢。

一個常見的解決方案是發射事件。 在這種情況下,GamePanel將觸發一個事件,通知新鼠標定位模型中所有感興趣的(訂閱事件)對象(實體)。

通過這種方式,GamePanel不需要明確知道要通知哪些實體,並且實體不需要保留GamePanel的實例。

我的建議:閱讀事件監聽器。 (java.util中)

您可以始終將當前坐標設置為GamePanel的公共屬性,以便實體/模型可以從那里簡單地訪問它。

如果要輪詢當前鼠標位置,可以隨時在Event Dispatch Thread中運行此代碼snipplet:

Point pt = MouseInfo.getPointerInfo().getLocation();
Point cpt = GamePanel.getLocationOnScreen();
Point rel = new Point(pt.x - cpt.x, pt.y - cpt.y);

並且rel包含鼠標的相對位置。

或者,您可以查看JInput ,因為它旨在處理鍵盤/鼠標/任何輸入。

模型是否總是需要知道鼠標的位置。 IE:您是否需要在每次更新時使用鼠標位置,或僅在特定點處使用鼠標位置。

如果您在每個點或每次更新時都需要它,那么您記錄的解決方案或此處的任何解決方案都應該是可靠的。

如果您只在特定點需要它,那么只需抓住它。 (IE:如果您的游戲響應鼠標點擊,則點擊一下。)含義閱讀事件監聽器。

祝好運! 希望有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM