2014-02-24 61 views
-1

我正在構建一個遊戲,我想找到窗口的左上角點。如何獲取屏幕原點(左上角)?

(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,0。屏幕截圖不幫助我們在這裏,我們需要看到一些代碼。 「 – Joe

+0

」它不是(0,0),因爲角色正在移動。「這一點對我來說毫無意義。它應該仍然是0,0。 – Dan

+0

嘗試將您的比例更改爲0? zoom = 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; 
} 
0

當它來到0,0起源你有3種類型你具有Model,Worldview和Viewport及其依賴於您試圖訪問哪部分代碼。

如果您在模型上查找0,0,它將指向模型的左上角。如果您在Worldview上查找0,0,它將位於您所在區域的左下角(地圖),如果您正在查找視口0,0,它將位於左上角。

您目前正在使用該模型在世界視圖中查找您的位置。請嘗試在您的世界中存儲和使用您的視口位置並設置相對於您的模型/角色位置。

不知道任何代碼,任何人都難以直接提供幫助。

+0

t(0,0)點是地形的左上角......我需要我的角度左上角...就像基於地形(0,0)的圖片一樣。每次角色移動時都需要更新。告訴我你需要什麼代碼\ – user3325864

+0

好,所以我認爲你有一個矩形或位置來存儲視圖在地形上的位置。這是您的視口,這將是您的視圖的0,0(屏幕0,0)。如果您需要幫助,我們至少需要輸出顯示的部分代碼(即繪製地形和角色的部分)。看着你的相機,你有你的0,0與vp.x和vp.y – CRiv

+0

我添加了繪圖類,沒關係嗎? 和是的,我一直在尋找像你在評論中寫的屏幕(0,0)。我只是沒有找到任何存儲視口詳細信息或你在那裏說什麼rec。 – user3325864

相關問題