Ich habe einige Probleme, diesen Code zum Laufen zu bringen. Ich habe einen Debug-Bildschirm, in dem ich den Player und die Mausposition sehen kann, aber wenn sie nicht übereinstimmen, obwohl sich der Cursor über dem Player befindet.
Hier ist der relevante Code:
var rawMouse = currMouseState.Position.ToVector2();
var gameMouse = Globals.CoreServices.WindowManager.MouseWindowToRender(rawMouse);
return new InputState(gameMouse, activeActions);
Ich habe einige Probleme, diesen Code zum Laufen zu bringen. Ich habe einen Debug-Bildschirm, in dem ich den Player und die Mausposition sehen kann, aber wenn sie nicht übereinstimmen, obwohl sich der Cursor über dem Player befindet. Hier ist der relevante Code: [code]using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using TheCore.Entities.Characters; using TheCore.Entities.Components.Core; using TheCore.Utils.Geometry;
namespace TheCore.World;
public class Camera { private readonly float _cameraHeight = 720f;
// Virtual camera size private readonly float _cameraWidth = 1280f; private Vector2 _mapSize; private Player _player; private int _tileSize; private Viewport _viewport;
public Vector2 ClampedPosition { get; private set; }
public Matrix Transform { get; private set; }
public void SetTarget(Player player) { _player = player; }
/// /// Provides the camera with map size so it never moves outside the map /// public void SetMapAndTiles(Vector2 mapSize, int tileSize) { _mapSize = mapSize; _tileSize = tileSize; }
public void Update() { _viewport = Globals.CoreServices.WindowManager.ScaledViewport; _targetPosition = _player.GetComponent().Position;
float delta = Globals.DeltaTime;
Position = Vector2.Lerp( Position, _targetPosition, 1f - MathF.Exp(-_followSpeed * delta));
CalculateTransform(); }
/// /// Creates the final world-to-screen transformation matrix /// private void CalculateTransform() { // Scales the camera base size based on the scaled viewport var scaleX = _viewport.Width / _cameraWidth; var scaleY = _viewport.Height / _cameraHeight; var scale = Math.Min(scaleX, scaleY);
// Clamp camera center inside the map boundaries var posX = Math.Clamp(Position.X, _cameraWidth / 2, _mapSize.X * _tileSize - _cameraWidth / 2); var posY = Math.Clamp(Position.Y, _cameraHeight / 2, _mapSize.Y * _tileSize - _cameraHeight / 2);
using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using System;
namespace TheCore.Services { public class WindowManager { private readonly Game _game; private readonly GraphicsDeviceManager _graphics;
// Base resolution public int RenderWidth = 1920; public int RenderHeight = 1080; // public RenderTarget2D RenderTarget {get; set;}
// private int _windowWidth; private int _windowHeight;
// The resolution will be scaled on these values given the window size of the player private int _scaledWidth; private int _scaledHeight; public bool IsFullsize = false;
public GraphicsDevice GraphicsDevice => _graphics.GraphicsDevice;
public Viewport ScaledViewport { get; private set; }
// This matrix is important for the spritebatches to scale everything public Matrix ScaledMatrix { get { float scaleX = (float)_scaledWidth / RenderWidth; float scaleY = (float)_scaledHeight / RenderHeight; float scale = Math.Min(scaleX, scaleY);
/// /// Calls the viewport update function if player resizes the window /// private void OnWindowResize(object sender, EventArgs e) { UpdateScaledViewport(); }
/// /// Updates the visible viewport based on the window size of the player /// private void UpdateScaledViewport() { int windowW = _graphics.GraphicsDevice.PresentationParameters.BackBufferWidth; int windowH = _graphics.GraphicsDevice.PresentationParameters.BackBufferHeight;
// To transform mouseclicks public Vector2 MouseWindowToRender(Vector2 mouseWindow) { float x = (mouseWindow.X - ScaledViewport.X) * RenderWidth / ScaledViewport.Width;
float y = (mouseWindow.Y - ScaledViewport.Y) * RenderHeight / ScaledViewport.Height;
return new Vector2(x, y); }
public void f11FullScreen() { SetFullScreen(!IsFullsize); } } } [/code] Mein Input Manager: [code]var rawMouse = currMouseState.Position.ToVector2(); var gameMouse = Globals.CoreServices.WindowManager.MouseWindowToRender(rawMouse); return new InputState(gameMouse, activeActions); [/code] Mit der gameMouse bewerbe ich mich dann [code]worldManager.Camera.RenderToWorld(gameMouse); [/code] aber diese Position scheint nicht richtig zu sein.
Wie kann ich eine Lösung implementieren, die es Benutzern ermöglicht, mit der Maus auf Desktop-Geräten und mit Touch-Gesten (Fingerstreichen) auf Mobilgeräten durch Folien zu navigieren, ohne auf...
Wie kann ich eine Lösung implementieren, die es Benutzern ermöglicht, mit der Maus auf Desktop-Geräten und mit Touch-Gesten (Fingerstreichen) auf Mobilgeräten durch Folien zu navigieren, ohne auf...
Wie kann ich eine Lösung implementieren, die es Benutzern ermöglicht, mit der Maus auf Desktop-Geräten und mit Touch-Gesten (Fingerstreichen) auf Mobilgeräten durch Folien zu navigieren, ohne auf...
Wie kann ich eine Lösung implementieren, die es Benutzern ermöglicht, mit der Maus auf Desktop-Geräten und mit Touch-Gesten (Fingerstreichen) auf Mobilgeräten durch Folien zu navigieren, ohne auf...