【问题标题】:Placing object based on different variables根据不同的变量放置对象
【发布时间】:2020-05-20 07:05:18
【问题描述】:

我正在使用SFML.Net 制作游戏库,我希望能够在屏幕上放置一个 50x50 的图块。
我有窗口宽度、窗口高度、MouseX/MouseY 和基于custom camera 的偏移量。按下 WASD 时,偏移量可能会增加/减少 0.5 个像素。

因此,我需要知道如何获取相对于所有这些变量的 mouseX,这样我就可以放置一个图块,使其错觉是用户按下鼠标的位置。

我已经尝试了下面的代码。
注意: Game.Instance.Scenes[Game.Instance.CurrentScene].Camera.Offset 是相机偏移量。

 public static float MouseX = 0;
        public static float MouseY = 0;
        public static float MouseXRelative = 0;
        public static float MouseYRelative = 0;

        public static void UpdateRelative()
        {
            MouseXRelative = MouseX + Game.Instance.Scenes[Game.Instance.CurrentScene].Camera.Offset.X;
            MouseYRelative = MouseY + Game.Instance.Scenes[Game.Instance.CurrentScene].Camera.Offset.Y;
        }

下面的代码。
注意:这会检测何时按下鼠标左键,然后创建一个 GameObject,MyGO,**并根据 MouseX/ 定位它MouseY 和偏移量。另外,RoundTo() 是我制作的一种简单扩展方法,允许四舍五入到某个数字。

if (MouseHandle.LeftButtonDown)
            {
                float x = MouseHandle.MouseX.RoundTo(50) + Game.Instance.Scenes[Game.Instance.CurrentScene].Camera.Offset.X;
                float y = MouseHandle.MouseY.RoundTo(50) + Game.Instance.Scenes[Game.Instance.CurrentScene].Camera.Offset.Y;

                MyGO gm3 = new MyGO();
                gm3.SetPosition(x, y);
                Game.Instance.Scenes[Game.Instance.CurrentScene].Add(gm3);
            }

【问题讨论】:

    标签: c# mouse game-engine sfml.net


    【解决方案1】:

    我找到了答案。 你需要做的是使用我写的这段代码:

    public static void UpdateRelative(int rt, bool doRound = false)
            {
                float hw = Game.Instance.Width / 2;
                float hh = Game.Instance.Height / 2;
                Vector2f CameraCenter = new Vector2f();
                CameraCenter.X = hw;
                CameraCenter.Y = hh;
    
                float diffx;
                float diffy;
    
                MouseXRelative = CameraCenter.X - MouseX;
                MouseYRelative = CameraCenter.Y - MouseY;
    
                if (doRound)
                {
                    MouseXRelative.RoundTo(rt);
                    MouseYRelative.RoundTo(rt);
                }
    
                diffx = MouseXRelative - MouseX;
                diffy = MouseYRelative - MouseY;
    
                MouseXRelative = MouseXRelative - diffx;
                MouseYRelative = MouseYRelative - diffy;
            }
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-23
      • 1970-01-01
      • 2011-03-10
      • 1970-01-01
      • 2021-02-08
      • 2017-11-28
      • 2018-08-18
      • 1970-01-01
      相关资源
      最近更新 更多