1

長方形で楕円のバウンスを作成しようとしています。タイマーを使用して楕円を x 方向と y 方向の両方に移動しています。私の考えは、if ステートメントを作成して、楕円の座標が四角形の座標と一致するかどうかを確認することでした。

これまでに書いたコードは次のとおりです。

  public partial class Form1 : Form
   {      
    Class1 square = new Class1();
    public int before;
    public int after;
    public int c;

    public Form1()
    {      
        InitializeComponent(); 
    }

    protected override void OnPaint(PaintEventArgs e)
    {
        after = 590 - (b * b) / 100;
        before = 100 + (a * a) / 100;
        c = a + b;
        Graphics g = e.Graphics;
        SolidBrush Brush = new SolidBrush(Color.White);
        g.FillEllipse(Brush, a, before, 10, 10);            
        square.Draw(g);


        if (k >= square.y && a >= square.x && a <= square.x + 40)
        {
            a=c;
            before= after;
            timer1.Start();
            timer2.Stop();
        }
        else if (k >= square.y + 10)
        {
            timer2.Stop();
            MessageBox.Show("You lost");                
        }          
    }        

    protected override void OnMouseMove(MouseEventArgs e)
    {
        base.OnMouseMove(e);
        square.x = e.X;         
        Cursor.Hide();
    }

    public int a = 0;
    public int b = 0;

    public void timer2_Tick(object sender, EventArgs e)
    {
        a += 1;
        Invalidate();
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        b += 1;
        Invalidate();
    }
}

私は問題があることを知っています。そして、いくつか質問があります:

  1. 楕円を「バウンス」させる簡単な方法はありますか?
  2. 問題は、楕円がたどる曲線の計算だけにあるのでしょうか?

質問が多少未定義または抽象的である可能性があることは承知していますが、助けがあれば幸いです。いくつかの点でより明確にしたい場合は、お知らせください。ありがとう

4

1 に答える 1

0

エッジの楕円バウンスを作成する簡単な方法は、エッジ ポイントを境界に対してチェックし、適切な方向を反転することです。したがって、疑似コードを許していただければ、このようなものが機能するはずです

loop used to animate the ellipse
before moving, check the position:

if right-most position == right wall
    invert x velocity
if left-most position == left wall
    invert x velocity
if top-most position == top wall
    invert y velocity
if bottom-most position == bottom wall
    invert y velocity

move ellipse to next position

これは非常に単純なシミュレーションですが、より洗練されたモデルをどのように進めて開発するかについてのアイデアが得られるはずです。お役に立てれば!

于 2013-06-03T15:03:00.367 に答える