全局位置和 TileMap 位置未更新

问题描述 投票:0回答:1

目前使用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);
            }
        }
    }
}```
c# if-statement position godot scene2d
1个回答
0
投票

我想通了。这与我设置 PlayerCharacter 场景的方式有关。打印语句返回的坐标与我的玩家角色的枢轴点的位置相同。我刚刚在我的玩家角色前面添加了一个小的 Area2D 并使用它进行交互检测,效果很好。

© www.soinside.com 2019 - 2024. All rights reserved.