目前使用Godot 4.2.2 和C#。我一直在设置游戏使用键盘控制而不使用鼠标控制。我试图在按下“Enter”键时获取玩家角色的位置。它将返回玩家生成位置的全局和 TileMap 位置,但当场景运行时我的玩家在 Tilemap 上移动时,永远不会更新玩家的位置。当我运行该项目时,打印语句显示 PRESS_COUNT 正在更新,并且在按两次“Enter”键后,玩家角色生成位置附近的图块确实发生了变化,但是如果我将角色移动到图块地图上的不同位置,则位置print 语句返回相同:
玩家的全球排名:(585, 157)
图块地图位置:(18, 4)。
我不知道我哪里错了。
这是我当前的脚本:
using System;
public partial class FarmingScene : Node2D
{
[Export]
private TileMap tilemap;
private int PRESS_COUNT = 0;
public override void _PhysicsProcess(double delta)
{
PlayerCharacter playerCharacter = GetNode<PlayerCharacter>("PlayerCharacter");
if (Input.IsActionJustPressed("INTERACT"))
{
PRESS_COUNT++;
Vector2 playerGlobalPosition = playerCharacter.GlobalPosition;
GD.Print("Player's global position: ", playerGlobalPosition);
if (tilemap == null)
{
GD.PrintErr("Tilemap is not assigned.");
return;
}
Vector2I tileMapPosition = tilemap.LocalToMap(playerGlobalPosition);
GD.Print("Tilemap position: ", tileMapPosition);
if (PRESS_COUNT == 1)
{ GD.Print("Hit Enter Once");
Vector2I tilledAtlasCoordinates = new Vector2I(7, 1);
tilemap.SetCell(0, tileMapPosition, 2, tilledAtlasCoordinates);
}
else if (PRESS_COUNT == 2)
{
GD.Print("Hit Enter Twice");
Vector2I wateredAtlasCoordinates = new Vector2I(7, 4);
tilemap.SetCell(0, tileMapPosition, 2, wateredAtlasCoordinates);
}
else
{
GD.Print(PRESS_COUNT);
}
}
}
}```
我想通了。这与我设置 PlayerCharacter 场景的方式有关。打印语句返回的坐标与我的玩家角色的枢轴点的位置相同。我刚刚在我的玩家角色前面添加了一个小的 Area2D 并使用它进行交互检测,效果很好。