如何使用字典在网格中获得点位置?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用字典在网格中获得点位置?相关的知识,希望对你有一定的参考价值。
有人能帮我吗?我为我的电路板制作了一个网格。当我试图在棋盘中获得方块的Point位置时,控制台仅返回(0,0)。
这是我的点代码:
public struct Point
{
public int X {get; set;}
public int Y {get; set;}
public Point(int x, int y){
this.X = x;
this.Y = y;
}
}
这是脚本,其中每个方块在实例化时在网格中获得一个点:
public Point GridPosition { get; set; }
public void Setup(Point gridPos, Vector3 worldPos)
{
this.GridPosition = gridPos;
transform.position = worldPos;
}
private void OnMouseDown(){
Debug.Log (GridPosition.X + ", "+ GridPosition.Y );
}
这是我的主要脚本与词典部分:
public static Dictionary<Point,Grid> Tiles { get; set; }
void Start()
{
CreateLevel ();
}
void CreateLevel()
{
Tiles = new Dictionary<Point,Grid> ();
}
private void PlaceTilesColliders(Vector3 tileStart, float tileOffset){
for (int y = 0; y < 8; y++)
{
for (int x = 0; x < 8; x++)
{
TileCollider.GetComponent<Grid> ().Setup (new Point (x, y), new Vector3 (tileStart.x + (tileOffset * x), tileStart.y - (tileOffset * y), 0));
Tiles.Add (new Point (x, y), Instantiate(TileCollider).GetComponent<Grid>());
}
}
}
所以,控制台每次返回(0,0),无论点击哪个方块都无关紧要。有人能解释我如何在网格中获得正方形的真正点位置吗?
avariant对他们的答案基本上是正确的,但我想指出你的代码实际在做什么以及为什么你得到你正在获得的价值。
让我们看看这个循环:
for (int y = 0; y < 8; y++) {
for (int x = 0; x < 8; x++) {
TileCollider.GetComponent<Grid> ().Setup (new Point (x, y), new Vector3 (tileStart.x + (tileOffset * x), tileStart.y - (tileOffset * y), 0));
Tiles.Add (new Point (x, y), Instantiate(TileCollider).GetComponent<Grid>());
}
}
我们遍历Y和X(这很好),然后我们调用TileCollider.GetComponent<Grid> ()
。等等,等一下,TileCollider
?这是什么?这不能是我们在场景中的文件之一,我们没有使用我们的X和Y坐标来从场景中获取GameObject来获取此引用...
这意味着我们对它做的任何事情对我们游戏世界中的瓷砖都没有影响!并且因为引用没有更新,我们不断更新它的值到新的X和Y位置,覆盖我们已经完成的任何事情并且没有任何影响。
哎呀。
这就是为什么avariant说你需要调用Instantiate
并创建一个新的tile,然后从该GameObject获取组件并在其上调用Setup()
。
首先尝试Instantiate
,然后配置生成的新Grid并添加到字典中。
for (int y = 0; y < 8; y++)
{
for (int x = 0; x < 8; x++)
{
GameObject newGrid = Instantiate(TileCollider);
newGrid.GetComponent<Grid>().Setup(new Point (x, y), new Vector3 (tileStart.x + (tileOffset * x), tileStart.y - (tileOffset * y), 0));
Tiles.Add(new Point (x, y), newGrid.GetComponent<Grid>());
}
}
不过,我建议您注意养育,因为现在实例化的对象没有父对象。
以上是关于如何使用字典在网格中获得点位置?的主要内容,如果未能解决你的问题,请参考以下文章
机器学习进阶-光流估计 1.cv2.goodFeaturesToTrack(找出光流估计所需要的角点) 2.cv2.calcOpticalFlowPyrLK(获得光流检测后的角点位置) 3.cv2.