2013-06-25 25 views
0

我有一堆插入四叉樹的坦克對象。如果他們實現可點擊的界面,可以點擊這些坦克對象中的一些。問題是爲了知道被點擊的是什麼,我需要查詢相同的四叉樹,但四叉樹同時具有可點擊和不可點擊的對象。如何避免在這種情況下使用instanceOf? (只允許點擊四叉樹中的一些物體)

潛在的解決方案:

  1. 我可以用instanceof來看看,當用戶點擊屏幕哪些在指定區域分別點擊,但我聽說使用}這種是不好的做法。

  2. 我可以維護兩個四叉樹。一個用於坦克,一個用於可點擊的對象。但之後我可能需要更新實現可點擊界面TWICE的坦克,因爲它們將處於兩個獨立的四叉樹中,考慮到我必須更新每一步,因此人們只會每隔一段時間點擊一次屏幕,這會很慢。

  3. 我只能將可點擊的對象插入到四叉樹中,並且只是使不可點擊的對象定義虛擬點擊方法。這樣可以解決問題,但是它並不正確,因爲如果某些內容不可點擊,那麼即使它是空的,它也不應該實現點擊方法。或者這可以嗎?

我在想#3可能是最好的辦法,但我不確定。任何指針?

編輯:現在我想起它,#3會有一些問題處理重疊點擊。如果一個不可點擊的坦克與可點擊的坦克重疊,並且我點擊了重疊部分,除非我在該點上調用所有點擊方法,否則我最終可能會調用錯誤坦克的點擊方法。爲了避免這樣做,我不得不使用instanceOf並找到可點擊的對象,只調用ITS點擊方法。

因此,也許#2更好,因爲我可以輕鬆地遍歷點擊區域中的所有可點擊對象,並選擇頂部或最接近區域中心的那個,只調用坦克點擊方法。

它也可能不一定是它們重疊,但只是靠在一起。如果我想讓這個遊戲觸摸到,你的手指不是一個點,而是一個區域,所以最好在一個區域中循環對象並找到最接近的可點擊對象,這對於3#而無需篩選大量不可點擊的對象。

回答

2

#3聽起來不錯。你也許可以通過創建所有對象實現的另一個接口來增強它,例如「GameObject」,它有一個方法「isClickable」。然後,您可以讓可點擊的對象爲isClickable實現「返回true」。

+0

是#3聽起來不錯,但我想到它可能是處理重疊問題。詳情請參閱我的編輯。現在我在想#2,但速度很慢。 – Tiby312

相關問題