Итак, у меня возникла проблема: столкновение не работает должным образом. Я попробовал много техник. Красные плитки должны были показать столкновение с зеленой плиткой. Проблема в том, что когда я пытаюсь преобразовать изометрические координаты в нормальные, что-то идет не так. Публичная Vector2 Rematrixlogic преобразует изометрическую логику в нормальную ось. void checkCollision проверяет, сталкивается ли плитка с игроком. Чтобы добиться этого, я использую для проверки прямоугольник; Однако он использовал метод алмазной проверки, но он не удался. Я не знаю, использовал ли я неправильную формулу или неправильный метод. Когда плитка сталкивается с игроком (зеленая плитка), плитка должна стать красной. Однако большинство плиток становятся красными, даже если они не сталкиваются. Щелкните эту ссылку, чтобы увидеть результаты запуска программы.
Это мой код:
Итак, у меня возникла проблема: столкновение не работает должным образом. Я попробовал много техник. Красные плитки должны были показать столкновение с зеленой плиткой. Проблема в том, что когда я пытаюсь преобразовать изометрические координаты в нормальные, что-то идет не так. Публичная Vector2 Rematrixlogic преобразует изометрическую логику в нормальную ось. void checkCollision проверяет, сталкивается ли плитка с игроком. Чтобы добиться этого, я использую для проверки прямоугольник; Однако он использовал метод алмазной проверки, но он не удался. Я не знаю, использовал ли я неправильную формулу или неправильный метод. Когда плитка сталкивается с игроком (зеленая плитка), плитка должна стать красной. Однако большинство плиток становятся красными, даже если они не сталкиваются. Щелкните эту ссылку, чтобы увидеть результаты запуска программы. Это мой код: [code]public class Game1 : Game { private GraphicsDeviceManager _graphics; private SpriteBatch _spriteBatch;
List tiles = new List();
Texture2D TestImage; SpriteFont Defaultext; Texture2D Image1; Texture2D Image2; Texture2D Image3; string message = "None"; int MoveX = 0; int Movey = 0; float Scale = 0; Player player; Tile testtile;
public Game1() { _graphics = new GraphicsDeviceManager(this); _graphics.PreferredBackBufferWidth = 1200; _graphics.PreferredBackBufferHeight = 700; Content.RootDirectory = "Content";
if (Keyboard.GetState().IsKeyDown(Keys.R)) { MoveX = 0; Movey = 0; DeletaAlltile(); ReadMap("..\\..\\..\\TestNotcsv.txt", 1); ReadMap("..\\..\\..\\1.txt", 2); } } public void DeletaAlltile() { for (int i = 0; i < tiles.Count; i++) { tiles.Remove(tiles[i]); } }
void drawoder() { bool once = true; for (int i = 0; i < tiles.Count; i++) { if (tiles[i].depth player.depth && once == true) { player.draw(_spriteBatch); once = false; }
else if (tiles[i].depth > player.depth && once == false) { tiles[i].draw(_spriteBatch); } } }
bool IsPointInDiamond(Vector2 point, Vector2 center, float halfWidth, float halfHeight) { // Calculate the diamond's boundaries based on its center and size return (Math.Abs(point.X - center.X) / halfWidth + Math.Abs(point.Y - center.Y) / halfHeight)