簡體   English   中英

如何找到列表中x和y位置值與給定x和y匹配的對象的索引

[英]How does one find the index of an object in a list whose x and y position value match a given x and y

我正在創建一個使用圖塊系統的游戲。 每個圖塊都是一個對象,其位置帶有Vector2。 我在清單中有所有磁貼。

我還有另一段代碼可以生成一堆Vector2,其中應將樹木放置在瓷磚網格上。 每個樹的位置都在列表的Vector2中

我的問題是,如何在樹坐標列表中找到與其坐標完全匹配的圖塊索引。 一旦找到,便可以告訴列表中的該平鋪對象將其treePresent布爾值設為true。

瓦片的gridPosition.X和gridPosition.Y:0(1,9)1(1,10)2(2,1)3(2,2)

樹木的treePosition.X和treePosition.Y:0(1,9)1(2,2)

然后我可以說:tileList [0] .treePresent = true; tileList [3] .treePresent = true;

使用圖塊系統的游戲不應使用動態系統(列表)來跟蹤圖塊。 我假設“平鋪系統”是指將整個游戲世界/地圖划分為2D網格。 原因有兩個:

  1. 您可能會使用更多的內存來存儲完整的數據映射。 如果您的世界上確實沒有太多事情發生,並且您大部分(80%或更多)只會看到空白/默認背景圖塊,那么該規則可能被證明是無效的。 但是,對於所有具有合理數據量的情況(這就是我在此處假設的情況),您將需要使用更多的內存,因為您必須存儲圖塊類型和x&y坐標,而不是僅存儲圖塊類型。
  2. 動態數據結構效率低下。 以這種方式獲取切片數據將花費很長時間,因為您必須遍歷整個列表以查找特定的切片。 因此,如果要使用圖塊(a,b),則必須遍歷所有圖塊(找到正確的圖塊后停止),並將每個圖塊的每個(x,y)與(a,b)進行比較。 聽起來不是很有效嗎?

因此,解決方案很簡單:制作2D瓷磚陣列。 第一個維度用於x坐標,第二個維度用於y。

例如:worldData [x] [y](或等效於您選擇的語言)。 以這種方式,查找圖塊非常容易。 在這里,如果我想要平鋪(a,b),我只需調用worldData [a] [b]。 無需循環或比較。

任何問題?

嘗試

tileList.Where(t => treeList.Contains(t.Position));

如果要四處走動,請注意,這會比較浮點數相等,這會引起問題。

您還可以制作一個2暗列表,並僅通過樹的位置引用圖塊。 除非您更改網格大小,否則不需要使用動態列表,而是可以創建二維數組

暫無
暫無

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

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