我正在使用 XNA 构建游戏。
我有一个 foreach 循环,它遍历一个带有瓷砖的列表。在 foreach 循环中,它会检查鼠标是否被点击、鼠标是否在瓷砖上以及鼠标是否在某个容器内。
哪里出错了,在里面
MouseInput.IsTileHovered(tile, camera)
每个图块都有自己的图块位置,范围从 x=1 和 y=1 到 x=20 和 y=15。但是,在 IsTileHovered() 函数中,平铺位置始终为 x=1 和 y=1。这是不正确的。正如我所说,每块瓷砖都有自己的位置,这是独一无二的。tilePosition 用于计算 worldPosition。
带有 foreach 循环的函数
public void PlaceNewTileOnMap(MapEditorTile newTile)
{
foreach (Tile tile in tiles)
{
if (MouseInput.IsClicked() && MouseInput.IsTileHovered(tile, camera)
&& MouseInput.IsMouseWithinTileContainer(backgroundRectangle))
{
tile.SetTileInfo(newTile.GetTileInfo());
tile.SetCurrentFrame(newTile.GetCurrentFrame());
Vector2 maxTiles = new Vector2(
Constants.MAP_EDITOR_DEFAULT_HORIZONTAL_TILES,
Constants.MAP_EDITOR_DEFAULT_VERTICAL_TILES);
MainTileGenerator tileGenerator = new MainTileGenerator(tile, tiles, maxTiles);
UpdateCorrectedTiles(tileGenerator.CorrectTiles());
}
}
}
总是接收位置 x=1 和 y=1 的图块的函数
public static bool IsTileHovered(Tile tile, Camera camera)
{
Vector2 mouseWorldPosition = Vector2.Transform(new Vector2(newMouseState.X, newMouseState.Y),
Matrix.Invert(camera.GetTransformation()));
if (mouseWorldPosition.X > tile.GetWorldPosition().X
&& mouseWorldPosition.X < tile.GetWorldPosition().X + (tile.GetSingleElementSize().X * GameServices.UIService.ScreenScale)
&& mouseWorldPosition.Y > tile.GetWorldPosition().Y
&& mouseWorldPosition.Y < tile.GetWorldPosition().Y + (tile.GetSingleElementSize().Y * GameServices.UIService.ScreenScale))
{
return true;
}
else
{
return false;
}
}
当我在 foreach 循环中将 tilePositions 写入控制台时,但在 if 语句之前,我得到了所有唯一的 tilePositions,这是正确的。但是,当我在 IsTileHovered() 函数中执行相同操作时,tilePosition 为 x=1 和 y=1,无论它使用列表中的哪个图块。
有谁知道我做错了什么?