그리드 시스템을 배치하여 그리드에 객체를 스냅 할 수 있으며, 완벽하게 작동하지만,이 상황에서 찾고있는 동작이 아닙니다. 나는 내 삶에 대해 감각을 일으킬만한 단어에 넣을 수 없었다. (어째서 나는 왜 머리를 감싸는 데 어려움을 겪고 있는가?) 그래서 나는 현재의 행동과 예상되는 행동으로 그림을 그렸다. 훨씬 더 나은 일 :특정 그리드 위치로 스냅
왼쪽이 현재 동작을 보여줍니다 (참고 :. 흰색 격자 선은 위 그림과 같이 그리드 시스템이 실제로 두 배 큰이 객체가 격자 선에 배치 할 수 있습니다 이것은 의도 한 동작입니다.)
오른쪽은 그리드에 스냅하는 방법입니다. 격자 노드 (또는 빈 중앙 노드)가 아닌 그리드 선에 개체를 배치하기 만하면됩니다.
예상되는 동작에서는 쌍을 이루는 값이 반대 인 경우 개체가 항상 눈금에 스냅됩니다 .- X가 ODD이고 Y 값이 맞으면 EVEN이어야합니다 (즉, [0 , 1], [1, 0], [2,3]). ODD 또는 둘 다이기 때문에 [0,0], [1,1], [4,2]에 스냅되지 않습니다. 내가 알고있는 행동은 내가 찾고있는 행동과 일치하지만 이것을 유용한 것으로 해석 할 수는 없습니다. 여기
은 전체의 그리드 코드에 스냅이다 : 이것은 당신이 X의 스냅 방법을 사용하면 Y 스냅 방법에 따라 달라집니다 때문에이 있어야 할 것 같다보다 조금 까다 롭습니다//Grab the mouse state
MouseState mouse = Mouse.GetState();
//TileX = (int)Math.Floor((float)(mouse.X/tileWidth)); //tileWidth = 80
//TileY = (int)Math.Floor((float)(mouse.Y/tileHeight)); //tileHeight = 80
//We want "snap to closest grid space" instead of "snap to next-lowest grid space",
//like the Math.Floor code does above. The ".ToInt()" extensions simply rounds a
//float to the closest integer. i.e. 2.2 = 2 2.5 = 3 3 = 3
TileX = ((float)mouse.X/tileWidth).ToInt();
TileY = ((float)mouse.Y/tileHeight).ToInt();
//Set the square to a whole tile coordinate
squarePosition.X = TileX * tileWidth;
squarePosition.Y = TileY * tileHeight;