XNA: У меня есть коробка 1 * 1 * 1, и я хочу знать, с какой стороны я нажимаю на нее.(Minecraft Clone) - PullRequest
2 голосов
/ 13 апреля 2011

Я сейчас создаю клон Minecraft (игра, в которой вы находитесь в трехмерном пространстве и создаете или удаляете блоки для создания структур). Итак, у меня есть почти все работы, которые мне нужны.Если я смотрю на блок, он подсвечивается так, как я хочу, и если я вызываю «RemoveBlock ()» с помощью щелчка правой кнопкой мыши, текущий блок будет удален.Но теперь я также хочу добавить блоки, щелкнув левой кнопкой мыши.

Итак, что у меня есть: AddBlock (Vector3 LookingAt, Vector3 Direction), где «LookingAt» правильно связано с 3dArray, в котором я храню свои блокданные.и Направление или Vector3.UnitX / Z / Y и отрицательные.Если я вручную скажу, что Direction = Vector3.UnitY, то будет добавлен блок над блоком LookedAt.это то, чего я хочу.

Но как мне понять, с какой стороны я смотрю на Блок?то есть.Определенное направление: я попытался создать 6 сфер вокруг LookedatBlock, и из CameraPossition я нарисовал луч в CameraDirection, а затем попытался выяснить, с какой сферой он сталкивается первым.Центры шести спер всегда находятся в середине каждой стороны куба, а радиус равен 0.5f.Это имеет смысл для меня.Но это не работает.Что я могу сделать, чтобы заставить это работать.

Мне нужно, чтобы результат был чем-то вроде Vector3.UnitX / Y / Z, чтобы я мог использовать его с другими моими методами.

спасибо.

1 Ответ

3 голосов
/ 14 апреля 2011

Я полагаю, что вы могли бы определить, на какой стороне вы щелкаете, проверив значения X, Y и Z и выяснив их исходный вектор куба.

Например, скажем, верхний-задний левый 100-пиксельного куба - это Vector3 с (0,0,0) (конечно, относительно куба). Что ж, если вы нажмете на нижний передний правый куб, координаты будут (100, 100, 100), верно?

Используя это, вы можете просто попытаться найти границы квадрата на кубе. Например, шесть сторон будут между следующими векторами:

Сторона 1: (0,0,0), (100,0,0), (0,0,100) и (100,0,100) Сторона 2: (0,100,0), (100,100,0), (0,100,100) и (100,100,100)

Это верхняя и нижняя стороны куба, соответственно, использующие систему координат XYZ и выбирающую точку, с которой нужно начинать. Если я испортил одну из координат, прости меня, но они должны быть примерно правильными.

Таким образом, вы можете определить, где вы щелкнете по кубу, точно определить Вектор3, в котором вы щелкнули, чтобы выяснить, на какой стороне он находится, просто найдя (хорошо, если значение этой стороны (i, 100, j) ... ).

Имеет ли что-нибудь из этого смысл? Я предполагаю, что когда вы нажимаете на куб, возвращается какой-то Вектор.

Кроме того, это может помочь добавить инструмент отладки, который показывает, на какой вектор указана ваша мышь и т. Д.?

...