簡體   English   中英

如何繪制圓圈並在c#中移動

[英]How to draw circle and move in c#

我試圖繪制一個圓圈並在c#中以一種形式移動它。 我使用GDI繪制,如下所示。 假設我有1個圓圈

int postitionX, postitionY, radius, angle;
void Draw(Graphics g)
{
    g.DrawEllipse(Pen, postitionX, postitionY, radius, radius);
    g.FillEllipse(SolidBrush, postitionX, postitionY, radius, radius);
}

並且在表格main I init circle(postitionX = 0,postitionY = 10,radius = 20,angle = 30;)

private void form_Paint(object sender, PaintEventArgs e)
{
     <caculation postition next>
    mycircle.Draw(e.Graphics)
}

但問題是函數form_Paint運行多次並使圓圈移出顯示。 有人能給我解決方案嗎?

Invalidate將導致表單的完全重繪,並將調用您的`form_Paint'事件處理程序。 這將導致無限循環。 (我現在看到TaW就在前面)。 如果要在表單上為圓圈設置動畫,可以使用以下方法:

在表單上放置一個Timer ,將Interval設置為30, Enabled為True。 實現Tick事件:

private int deltaX = 1;

private int deltaY = 1;

private void timer1_Tick(object sender, EventArgs e)
{ 
    // TO DO your caculation postition, like so:
    // be sure window width/height  is much larger than 2 * radius:           
    if ((postitionX - radius) <= 0)
        deltaX = 1;
    if ((postitionX + radius) >= ClientRectangle.Width)
        deltaX = -1;
    positionX += deltaX;

    if ((postitionY - radius) <= 0)
        deltaY = 1;
    if ((postitionY + radius) >= ClientRectangle.Heigth)
        deltaY = -1;
    positionY += deltaY;
    // Now you have calculated a 'new animation frame'. 

    // Now force repaint to draw.
    Invalidate(); // This will force a repaint
}

現在更新你的form_Paint處理程序:

private void form_Paint(object sender, PaintEventArgs e)
{
    // caculation postition next HAS TO BE REMOVED FROM HERE
    mycircle.Draw(e.Graphics)
    // Invalidate(); HAS TO BE REMOVED FROM HERE
}

通過使用timer1.Interval的timer1.Interval結合下一個位置的計算,可以使動畫更慢或更快。

所以假設我繪制圓圈的路徑轉到3點。 如果我使用計時器滴答,那么如何。

private void timer1_Tick(object sender, EventArgs e)
{
// Go to point 1  
// Go to point 2 
// Go to point 3
}
private void form_Paint(object sender, PaintEventArgs e)
{
    // caculation postition next HAS TO BE REMOVED FROM HERE
    mycircle.Draw(e.Graphics)
    // Invalidate(); HAS TO BE REMOVED FROM HERE
}

所以圓圈將經過第3點然后form_main開始重繪。我不想要那樣。 那么,你怎么可能

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM