2014-03-13 69 views
1

我正在製作簡單的遊戲(c#Win Forms),其中我的角色在關鍵事件(箭頭)上移動。c#從另一個表格中繪製

主要類:

switch(e.Keycode) 
{ 
    case Keys.Left: 
    creature.moveleft(this,speed); 
} 

我的生物類看起來是這樣的:

public void Left(object sender,int speed) 
{ 
    Form form = (Form)sender; 

    Graphics grp = form.CreateGraphics(); 
    .. 
    .. 
    .. 
} 

我不喜歡,我要我要畫點什麼,每次經過this。對於Creature類中的每種繪製方法,我最終都有Form form=(Form)sender

有沒有更好的方法來做到這一點?

我認爲如果我在我的生物類中繼承Form並且使用Graphics grp=this.CreateGraphics可以工作,但它實際上並沒有繪製任何東西。

感謝

+0

'CreateGraphics'使臨時繪圖表面,甚至在你看到它之前可能會被刪除。方法選擇不當。使用窗體的「Paint」方法在窗體中繪製。 – DonBoitnott

回答

0

如果你的生物類時,就產生了表格後,爲什麼不通過形式作爲參數構造函數,例如:

public class Creature 
{ 
    private Form form; 

    public Creature(Form form) 
    { 
     this.form = form; 
    } 

    ... 

    public void Left(int speed) 
    { 
     Graphics grp = form.CreateGraphics(); 
     .. 
     .. 
     .. 
    } 
} 
+0

建議的意思:如果您打算在表單上繪圖,請使用'Paint'事件在表單中執行。 'CreateGraphics'總是一個糟糕的選擇。 – DonBoitnott

+0

這是正確的,但一個更大的問題來回答! –

+0

@ DonBoitnott @Chris Ballard那麼使用Paint事件做正確的方法是什麼?爲什麼CreateGraphics選擇不佳?謝謝 –

相關問題