我正在使用XNA来构建游戏。
我有一个foreach循环,循环遍历带有tile的列表。在foreach循环中,它将检查是否单击了鼠标,鼠标是否位于图块上以及鼠标是否在某个容器内。
哪里出错了,就在
里面MouseInput.IsTileHovered(tile, camera)
每个图块都有自己的图块位置,范围从x = 1到y = 1到x = 20和y = 15。 但是,在IsTileHovered()函数中,tile位置始终为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。
有谁知道我做错了什么?
答案 0 :(得分:0)
好的,所以这对我来说太愚蠢了。看来
MouseInput.IsClicked
在foreach中的第二个tile上返回false,即使它仍然是相同的帧。所以我所要做的就是从
更改if语句中的顺序if (MouseInput.IsClicked() && MouseInput.IsTileHovered(tile, camera)
&& MouseInput.IsMouseWithinTileContainer(backgroundRectangle))
到
if (MouseInput.IsTileHovered(tile, camera)
&& Input.IsMouseWithinTileContainer(backgroundRectangle)
&& MouseInput.IsClicked())
现在将检查鼠标是否最后被点击,所以它现在将根据我的需要循环遍历所有的图块。 :)