[英]Placing object based on different variables
我正在使用SFML.Net
制作一個游戲庫,並且我希望能夠在屏幕上放置一個 50x50 的圖塊。
我有 Window 寬度、Window 高度、MouseX/MouseY 和基於自定義相機的偏移量。 按下 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);
}
我找到了答案。 你需要做的是使用我寫的這段代碼:
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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.