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 になります。
私が間違っていることを誰かが知っていますか?