基于不同变量放置对象

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

我正在使用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个回答
0
投票

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

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;
        }

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