Я просматриваю около полутора часов или около того, чтобы найти решение этой проблемы. Я видел некоторые темы на форумах по разработке Xbox Live Indie, но сами форумы не загружаются (их убрали?) И везде, где я смотрю, я не могу найти ответ.
Проблема, с которой я столкнулся, заключается в том, что я не могу заставить какой-либо вид Intersect срабатывать между двумя BoundingBoxes. Я создал куб в трехмерном пространстве, а затем поставил прямоугольник в противоположных вершинах, и этот прямоугольник выглядит хорошо из того, что я могу сказать в Выводе. Как и BoundingBox камеры <- Для этого я взял позицию игрока и + - 1 на каждой оси для мин / макс. Первоначально я намеревался просто повторно использовать положение игрока как для минимума, так и для максимума, но это не сработало, поэтому я попробовал это, но все равно не работает. </p>
Вот некоторые фрагменты моего кода.
void CheckCollision(Vector3 inPos, Vector3 inOldPos) //The idea for the inPos and
old position was that I'd reset the player's position to the old pos if there's a collision
{
if (block.collisionBox.Intersects(cam.cameraBox))
{
Debug.WriteLine("HELP"); //This doesn't trigger
}
}
Следующее обновление в основном классе игры.
protected override void Update(GameTime gameTime)
{
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape))
Exit();
CheckCollision(cam.Position, cam.comparisonVector);
base.Update(gameTime);
}
Теперь переходим к классу Куба.
private void SetUpVertices()
{
vertices = new VertexPositionColor[8];
//front left bottom corner
vertices[0] = new VertexPositionColor(new Vector3(0, 0, 0), color);
//front left upper corner
vertices[1] = new VertexPositionColor(new Vector3(0, 5, 0), color);
//front right upper corner
vertices[2] = new VertexPositionColor(new Vector3(5, 5, 0), color);
//front lower right corner
vertices[3] = new VertexPositionColor(new Vector3(5, 0, 0), color);
//back left lower corner
vertices[4] = new VertexPositionColor(new Vector3(0, 0, -5), color);
//back left upper corner
vertices[5] = new VertexPositionColor(new Vector3(0, 5, -5), color);
//back right upper corner
vertices[6] = new VertexPositionColor(new Vector3(5, 5, -5), color);
//back right lower corner
vertices[7] = new VertexPositionColor(new Vector3(5, 0, -5), color);
collisionBox = new BoundingBox(vertices[0].Position, vertices[6].Position);
vBuffer = new VertexBuffer(device, typeof(VertexPositionColor), 8, BufferUsage.WriteOnly);
vBuffer.SetData<VertexPositionColor>(vertices);
}
И, наконец, класс камеры.
void UpdateBoundingBox()
{
cameraBox = new BoundingBox(cameraPosition + new Vector3(-1, -1, -1), cameraPosition + new Vector3(1,1,1));
}
Если вы хотите что-нибудь еще, просто дайте мне знать :) Я ценю любую помощь, спасибо