Matrix 如何在2d游戏中获得摄影机纹理矩阵
我的camera类是this,我在screen类中使用它来渲染地图。我需要能够做到这一点,这样我就可以画水星粒子引擎粒子,而不会让它看起来像是被拖过屏幕Matrix 如何在2d游戏中获得摄影机纹理矩阵,matrix,xna,camera,2d,game-engine,Matrix,Xna,Camera,2d,Game Engine,我的camera类是this,我在screen类中使用它来渲染地图。我需要能够做到这一点,这样我就可以画水星粒子引擎粒子,而不会让它看起来像是被拖过屏幕 using System; using System.Threading; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.Graphics; us
using System;
using System.Threading;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using TiledLib;
namespace TiledLib
{
public class Camera
{
public Vector2 Position;
public int Width;
public int Height;
public Vector2 Target;
public Rectangle ClampRect;
public Vector2 Origin = new Vector2(0,0);
float Speed = 0.2f;
public Camera(Viewport vp, Map map)
: this(vp, new Rectangle(0, 0, (map.Width * map.TileWidth), (map.Height * map.TileHeight)))
{ }
public Camera(Viewport vp, Rectangle clampRect)
{
Position = Origin;
Width = vp.Width;
Height = vp.Height;
ClampRect = clampRect;
// Set initial position and target
Position.X = ClampRect.X;
Position.Y = ClampRect.Y;
Target = new Vector2(ClampRect.X, ClampRect.Y);
}
public void Update()
{
// Clamp target to map/camera bounds
Target.X = (int)MathHelper.Clamp(Target.X, ClampRect.X, ClampRect.Width - Width);
Target.Y = (int)MathHelper.Clamp(Target.Y, ClampRect.Y, ClampRect.Height - Height);
// Move camera toward target
Position = Vector2.SmoothStep(Position, Target, Speed);
}
}
}来自变换的通用摄像机矩阵。如果没有缩放或旋转,请删除这些线
return
Matrix.CreateTranslation(new Vector3(-Location.X, -Location.Y, 0)) *
Matrix.CreateRotationZ(Rotation) *
Matrix.CreateScale(Zoom) *
Matrix.CreateTranslation(new Vector3(Origin.X, Origin.Y, 0));