2010-07-12 37 views
0

我想在C#中做一個基本的足球遊戲,並且除了在遊戲中相當重要的各種弧和圓外,我幾乎完成了該領域,特別是設置電腦玩家無法通過的界限,而他們的隊友/對手正在排隊踢球。 所以,我試過的所有方法都沒有工作,因爲顯然我使用字段類型,但我正在複製代碼。但我不認爲它顯示錯誤代碼非常重要,因爲我開始刪除它,我希望這些圈子永久存在,而不是在調試開始時。所以這就是我所需要的:具有圓形邊框的面板保持圓形,並且是一種將其放入我的代碼中的方式,如有必要,我會發布這些代碼。 Visual Studio C#Express 2010. 所有幫助表示感謝,在C#中將一個面板變成一個圓圈Visual Studio 2010

+0

你應該向我們展示了bug的代碼,所以我們可以提供幫助。在控件上繪製圓圈要比試圖製作具有圓形邊框的某種面板容易得多。 – Detmar 2010-07-12 06:12:42

+0

您還應該解釋您是否使用WPF或Windows窗體。 – 2010-07-12 06:32:54

+0

我正在使用Windows窗體。如果您可以告訴我如何將圓圈/弧線繪製到更好的面板上,那麼重要的是他們可以處理MouseEnter事件。 – Apophis 2010-07-12 07:42:16

回答

0

在面板上繪製圓的一種簡單方法是繼承Panel並覆蓋OnPaint方法。在這種方法中,你可以在Graphics對象事件參數中調用DrawEllipse。感興趣的是,尺寸被設置爲寬度-1和高度-1。這會停止圓圈的右側和底部以消除面板控件。

我在這段代碼中加入了一個增強功能,即在OnResize方法中約束寬度&高度,這可以確保您的面板始終是一個圓形,與Ellipse(可以具有不同的寬度和高度)相反。只需將此控件拖放到窗體上並在設計器中播放即可。

public class CirclePanel : Panel 
{ 
    public CirclePanel() 
    { 
    } 

    protected override void OnPaint(PaintEventArgs e) 
    { 
     Graphics g = e.Graphics; 
     g.DrawEllipse(Pens.Black, 0,0,this.Width-1,this.Height-1); 
    } 

    protected override void OnResize(EventArgs e) 
    { 
     this.Width = this.Height; 
     base.OnResize(e); 
    } 
} 
+0

我已經這樣做了,但沒有發生任何事情:(我認爲它可能在公共CirclePanel裏面沒有任何內容,我有8個面板需要繪製弧線,我需要把他們的名字放在這裏嗎?如果這是煩人的 謝謝 – Apophis 2010-07-13 01:04:20

0
namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     Pen mypen; 
     Color mycolor=Color.Red; 
     Graphics mygraph; 

     int xloc = 50, yloc = 50; 

     public Form1() 
     { 
      InitializeComponent(); 
      mygraph = CreateGraphics(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 

     } 


     float x = 270, y = 0.5f; 

     int xmover = 100, ymover = 48; 
     private void timer1_Tick(object sender, EventArgs e) 
     { 

      mygraph.DrawEllipse(new Pen(Color.Red), xloc, yloc, 102, 102); 
      mygraph.FillEllipse(new SolidBrush(Color.Red), xmover++, ymover++, 4, 4); 
      mycolor = this.BackColor; 
      mygraph.DrawPie(new Pen(mycolor), xloc+1, yloc+1, 100, 100, x-1, y); 
      mygraph.DrawPie(new Pen (Color.Red), xloc + 1, yloc + 1, 100, 100, x++, y); 
      mygraph.FillEllipse(new SolidBrush(mycolor), xmover-1, ymover - 1, 4, 4); 
      mygraph.DrawEllipse(new Pen(Color.Red), 100, 50, 5, 5); 


     } 
    } 
}