我正在构建游戏,我想找到窗口的左上角。
不(0,0)因为角色正在移动而摄像机正在跟随他。 我必须找到另一种方式,然后通过根据角色计算点数。
也许某些已经构建进入XNA?
我添加了一些照片:
1)http://i.stack.imgur.com/ytpV9.png
2)http://i.stack.imgur.com/rx71u.png
我需要另一种方法来做到这一点。 请告诉我你是否有想法或是否有可能。
修改 相机代码:
public class Camera
{
public Matrix Mat { get; private set; }
V2 pos;
IFocus focus { get; set; }
F zoom;
Viewport vp;
//ctor
public Camera(IFocus focus , Viewport vp , F zoom)
{
this.focus = focus;
this.zoom = zoom;
this.vp = vp;
this.pos = V2.Zero;
}
public void update()
{
Mat = Matrix.CreateTranslation(-pos.X, -pos.Y, 0) *
Matrix.CreateRotationZ(0) * //-focus.Rot
Matrix.CreateScale(zoom , zoom , 1) *
Matrix.CreateTranslation(vp.Width / 2 , vp.Height / 2 , 0);
this.pos = V2.Lerp(this.pos, focus.Pos, 0.97f);
}
绘图代码:
class Drawing : IFocus
{
#region Data
protected T2 tex;
protected V2 org;
protected Rec? rec;
public V2 Pos { get; set;}
C color;
public F Rot { get; set;}
protected V2 scale;
protected SE se;
F layer;
#endregion
//Rec? - can be NULL
#region ctor
public Drawing(T2 tex, V2 pos, Rec? rec, C color, F rot, V2 org, V2 scale, SE se, F layer)
{
this.tex = tex;
this.Pos = pos;
this.rec = rec;
this.color = color;
this.Rot = rot;
this.org = org;
this.scale = scale;
this.se = se;
this.layer = layer;
Game1.CallDraw+=new SigDraw(Draw);
}
#endregion
#region Drawing
public virtual void Draw()
{
Game1.spriteBatch.Draw(tex, Pos, rec, color, Rot, org, scale, se, layer);
}
答案 0 :(得分:0)
如果它的控制然后你传递控件得到点对象
private static Point FindLocation(Control ctrl)
{
Point p;
for (p = ctrl.Location; ctrl.Parent != null; ctrl = ctrl.Parent)
p.Offset(ctrl.Parent.Location);
return p;
}
答案 1 :(得分:0)
当涉及0,0个起源时,你有3种类型,你有模型,世界观和视口,它取决于你试图到达的代码部分。
如果您在模型上寻找0,0,它将指向模型的左上角。如果您在世界观中寻找0,0它将位于您所在区域的左下角(地图),如果您正在寻找视口0,0,它将位于左上角。
您目前正在使用模型在世界视图中查找您的位置。而是尝试在您的世界中存储和使用您的视口位置,并相对于此设置您的模型/角色位置。
如果不知道任何代码,任何人都很难直接提供帮助。