所以我是C#编程的新手,我正在创建一个带有图形的连接四个游戏。我有一个带圆圈的格子。我需要做的是,当用户点击某一列时,看到芯片向下移动。我需要用定时器吗?或者我做一个循环,也许每次都给一个较小的y坐标来向下移动这个循环?
还有,有没有办法让这个圆圈不与网格重叠?和中一样,我能让它看起来像是在网格后面移动吗?
这就是我迄今为止所做的。。。
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
}
}
很抱歉,我想上传一张网格的图片,但由于我是新用户,我不能-。-!!
提前感谢您的帮助:)
您可以使用计时器,但也需要在整个动画中跟踪每个圆。如果用户在动画仍在进行时单击另一列,该怎么办?你不会想重复使用同一个定时器,你会想要另一个。
计时器的一个缺点是,除非计时器经常关闭,否则圆圈不会顺畅地流动,但在经过的时间内移动正确的量会有问题(如果计算机负载过重,无法立即处理计时器怎么办?)。此外,WinForms API并不是为了处理高刷新率而设计的(其他库,如DirectX,就是为了这个目的而开发的)。
大多数有动画的游戏都使用另一种方法来处理这一切。从本质上讲,应用程序变成了一个while(true)大循环。它可能不是while(true)
,但其想法是,只要游戏正在运行,循环就会继续迭代。在循环的每次迭代中,您都会绘制游戏。下次循环迭代时,计算经过了多少时间,然后用它来确定每个精灵(图形)应该移动了多远,然后相应地绘制它们。这与实际动画的工作方式(例如影院中的电影)非常相似。在人眼看来,它看起来像一张运动的图片,但实际上它是一系列以高速刷新的静止图像(通常每秒30-60次)。
我不是专业的游戏开发者。我甚至不确定我是否会认为自己是"最业余的人"。我相信现代游戏编程比我所描述的要进化得多,但基本概念都在那里。我建议你读一本书(或者在网上找一本好的教程),旨在向非游戏开发者教授游戏开发(初学者指南)。