我正在使用XNA平台套件&我正在尝试实现跟随玩家的相机。我跟着David Amador's 2D Camera tutorial,相机按预期工作,它跟随玩家。但问题是我的所有瓷砖都不在“更新”方法中。
瓷砖在屏幕上正确绘制,但是如果我尝试点击一个瓷砖(我已经实现了,如果你用鼠标点击一个瓷砖它会破坏和消失)没有任何反应,但是如果我点击屏幕的底部(在我实施相机之前绘制的瓷砖,它们应该消失。如果有人遇到这个问题我会喜欢一些帮助!
(当我实现相机时,就像我的鼠标位置不正确一样)
这是来自Player类更新方法(这是我进行更改的地方)
代码:
MouseState mouseState = Mouse.GetState();
int cellX = (int)(camera.Pos.X + mouseState.X) / Tile.Width;
int cellY = (int)(camera.Pos.Y + mouseState.Y) / Tile.Height;
if (cellX < Level.Width && cellX >= 0 && cellY < Level.Height && cellY >= 0)
{
if (Level.GetTileAt(cellX, cellY).Collision != TileCollision.Passable)
{
if (Level.tiles[cellX, cellY].isDead != true)
{
selectionHooverRectangle = Level.GetBounds(cellX, cellY);
drawHooverRectangle = true;
hooveredVaildTile = true;
}
else
{
drawHooverRectangle = false;
hooveredVaildTile = false;
}
}
else
{
drawHooverRectangle = false;
hooveredVaildTile = false;
}
}
if (cellX < Level.Width && cellX >= 0 && cellY < Level.Height && cellY >= 0)
{
if (mouseState.LeftButton == ButtonState.Pressed)
{
Level.tiles[cellX, cellY].isDead = true;
}
}
答案 0 :(得分:0)
设置图块时,需要将相机位置添加到鼠标位置。
我假设你使用这样的东西来描述/创建瓷砖,任何带有X和Y值的东西都可以使用,所以只需替换你的方法所需的东西。
Tiles[MouseX / TileSize, MouseY / TileSize] = new Tile(...);
现在要添加相机位置,如果您希望缩放和旋转也可以继续使用matrix。然后我们只添加翻译值。
//Get the transformation matrix
Matrix cameraTransform = cam.get_transformation(device /* Send the variable that has your graphic device here */));
//Find the X and Y position by adding the matrix value to the mouse position, and scaling it down by your tile size
float X = (-cameraTransform.Translation.X + MouseX) / TileSize;
float Y = (-cameraTransform.Translation.Y + MouseY) / TileSize;
//Do Stuff with the tile
Tiles[(int)X,(int)Y] = new Tile(...);
或者,如果您不关心旋转和缩放,您只需添加没有矩阵的摄像机位置
float X = (cam.Position.X + MouseX) / TileSize;
float Y = (cam.Position.Y + MouseY) / TileSize;
//Do Stuff with the tile
Tiles[(int)X,(int)Y] = new Tile(...);