现在首先我想说我确实知道这个主题存在于websote上,但现有问题的答案(或问题,因为其中一个没有得到回答)并没有帮助我。< / p>
我在xna中创建一个游戏,在你从上面看你的角色,并通过右键单击地图区域来移动它。游戏玩法假设看起来像这样:https://www.youtube.com/watch?v=PDW_jFxfYEk
我曾尝试将地图视为二维地图,因为我只使用二维,是的,由于各种原因,这个游戏必须使用3D图形,并且它不起作用。
我继续尝试实现这里建议的两个解决方案: C# XNA Mouse position projected to 3D plane 他们没有那么好用。
最后我尝试使用viewport.unproject
方法将鼠标单击转换为vector3,然后将其实现到世界矩阵中,您可能会猜到这个结果如何。
所以,如果有人在这里可以请我建议一个方法,我会非常感激
这里有关于我的代码的一些信息:
BasicModel类:
class BasicModel
{
public Model model { get; protected set; }
public Matrix world = Matrix.Identity;
public BasicModel(Model m)
{
model = m;
}
public virtual void Update()
{
}
public void Draw(Camera camera)
{
Matrix[] transforms = new Matrix[model.Bones.Count];
model.CopyAbsoluteBoneTransformsTo(transforms);
foreach (ModelMesh mesh in model.Meshes)
{
foreach (BasicEffect be in mesh.Effects)
{
be.EnableDefaultLighting();
be.Projection = camera.projection;
be.View = camera.view;
be.World = GetWorld() * mesh.ParentBone.Transform;
}
mesh.Draw();
}
}
public virtual Matrix GetWorld()
{
return world;
}
}
这是ModelManager类
public class ModelManager : DrawableGameComponent
{
List<BasicModel> models = new List<BasicModel>();
Ghost thisPlayer;
public ModelManager(Game game)
: base(game)
{
}
public override void Initialize()
{
// TODO: Add your initialization code here
thisPlayer = new Ghost(Color.Red, 300, new Vector3(0.05f, 0.05f, 0));
base.Initialize();
}
protected override void LoadContent()
{
models.Add(new BasicModel(Game.Content.Load<Model>(@"watcher")));
base.LoadContent();
}
public override void Update(GameTime gameTime)
{
base.Update(gameTime);
}
public override void Draw(GameTime gameTime)
{
foreach (GhostModel bm in models)
{
bm.Draw(((Game1)Game).camera);
}
base.Draw(gameTime);
}
}
他们对我尝试过的任何解决方案都很清楚。