1

所以我是 C# 编程的新手,我正在创建一个带有图形的连接四游戏。我有一个带圆圈的网格。我需要做的是,当用户点击某个列时,看到芯片向下移动。我需要使用计时器或其他东西吗?还是我做一个循环,也许每次都给一个较小的 yCoordinate 向下移动圆圈?

另外,有没有办法让这个圆圈不会与网格重叠?如,我可以让它看起来好像它正在网格后面移动吗?

这是我到目前为止所做的......

    private int columnPosition = 0;
    private int xCoordinate;
    private int yCoordinate;

    public Form1()
    {
        InitializeComponent();
    }

    private void panel1_Paint(object sender, PaintEventArgs e)
    {

        Graphics g = grid.CreateGraphics();
        Pen pen = new Pen(Color.White, 1);
        Pen pen2 = new Pen(Color.Black, 4);

        for (int i = 0; i < 7; i++)
        {
            for (int j = 0; j < 6; j++)
            {
                g.DrawEllipse(pen2, new System.Drawing.Rectangle((i * 70) + 20, (j * 60) + 10, 50, 50));
                g.FillEllipse(pen.Brush, new System.Drawing.Rectangle((i *70) + 20, (j * 60) + 10, 50, 50));



            }
        }
    }

    private void panel2_Paint(object sender, PaintEventArgs e)
    {
        Graphics g = panel2.CreateGraphics();
        Pen pen = new Pen(Color.Red, 5);
        Pen pen2 = new Pen(Color.Black, 3);

        if (columnPosition != -1)
        {
            g.DrawEllipse(pen2, new System.Drawing.Rectangle(columnPosition * 35 - 15, 0, 50, 50));
            g.FillEllipse(pen.Brush, new System.Drawing.Rectangle(columnPosition * 35 - 15, 0, 50, 50));

        }

    }

    private void panel1_MouseMove(object sender, MouseEventArgs e)
    {
        columnPosition = e.X / 35;
        Console.WriteLine(e.X);
        panel2.Refresh();
    }

    private void panel1_MouseLeave(object sender, EventArgs e)
    {
        columnPosition = -1;
        panel2.Refresh();
    }

    private void panel1_MouseClick(object sender, EventArgs e) 
    {
          ///// THIS IS WHERE I AM STUCK
    }

}

抱歉,我想上传网格的图像,但由于我是新用户,我不能 -.- !!

在此先感谢您的帮助:)

4

1 回答 1

0

您可以使用计时器,但您还需要在整个动画中跟踪每个圆圈。如果用户在动画仍在播放时单击另一列怎么办?你不想重复使用同一个计时器,你会想要另一个。

计时器的一个缺点是圆圈不会顺畅流动,除非你让计时器经常关闭,但是你会遇到在已经过去的时间内移动正确数量的问题(如果计算机在负载很重,不能马上处理定时器?)。此外,WinForms API 并不是为处理高刷新率而设计的(为此目的开发了 DirectX 等其他库)。

大多数具有动画的游戏都使用另一种方法来处理所有这些。本质上,应用程序变成了一个大的 while(true) 循环。它可能不是字面上while(true)的,但想法是只要游戏在运行,循环就会继续迭代。在循环的每次迭代中,您绘制游戏。下一次循环迭代时,您计算已经过去了多少时间,然后使用它来确定每个精灵(图形)应该移动多远,然后相应地绘制它们。这非常类似于实际动画的工作方式(例如剧院中的电影)。对人眼来说,它看起来像是一张运动的画面,但实际上它是一系列高速刷新的静止图像(通常每秒 30 - 60 次)。

我不是专业的游戏开发者。我什至不确定我是否会认为自己是“最喜欢的人”。我确信现代游戏编程比我所描述的要发展得多,但基本概念都在那里。我会建议拿起一本书(或在网上找到一个好的教程),旨在向非游戏开发人员教授游戏开发(初学者指南)。

于 2012-11-26T22:30:29.377 回答