我想用这段代码实现,一个点在一条直线上来回运动。
现在的情况是,点只走一遍就不走了,这是为什么呀。
------------------------------------------------
哪位高手,有更好的思路或者代码,粘出来吧,谢谢了。
==================================================== //起始坐标
int a = 10;
int b = 10;
//终止坐标
int c = 140;
int d = 140; private void timer1_Tick(object sender, EventArgs e)
{
Graphics gp = CreateGraphics();
if (a > 140 || b > 140)
{
if (c > 10 || d > 10) {
c -= 1;
d -= 1;
gp.DrawEllipse(Pens.Red, c, d, 1, 1);
gp.DrawEllipse(Pens.Blue, c+1, d+1, 1, 1);
}
}
else { a += 1;
b += 1;
gp.DrawEllipse(Pens.Blue, a, b, 1, 1); }
现在的情况是,点只走一遍就不走了,这是为什么呀。
------------------------------------------------
哪位高手,有更好的思路或者代码,粘出来吧,谢谢了。
==================================================== //起始坐标
int a = 10;
int b = 10;
//终止坐标
int c = 140;
int d = 140; private void timer1_Tick(object sender, EventArgs e)
{
Graphics gp = CreateGraphics();
if (a > 140 || b > 140)
{
if (c > 10 || d > 10) {
c -= 1;
d -= 1;
gp.DrawEllipse(Pens.Red, c, d, 1, 1);
gp.DrawEllipse(Pens.Blue, c+1, d+1, 1, 1);
}
}
else { a += 1;
b += 1;
gp.DrawEllipse(Pens.Blue, a, b, 1, 1); }
解决方案 »
- C#调用OCX,传递函数地址给OCX中的函数,该怎么传?
- 异构系统数据通信讨论
- winform中启动word,word关闭时如何得知用户是否选择保存
- OutLook编程问题
- 我想做ASP.NET+Exchange2003的二次开发,想问一下他们应该怎么部署?
- 个关于WINFORM更新datagrid写库问题~谢谢!
- c#连接access插入一条记录,我先插入一部分列,后又插入一部分,怎么解决
- 在我的程序中怎么编写代码检测我的程序已经在OS中执行???
- 不知道CL333+128M的配置能不能跑VS.net?
- 安装ODTforVS2017_122010的时候出现这个错误提示
- 水晶报表里面子报表嵌套子报表有什么方法可以实现?
- 50分,winform里是否有直接删除txt指定行的办法(方便附上代码)
int a = 10;
int b = 10;
//终止坐标
int c = 140;
int d = 140; private void timer1_Tick(object sender, EventArgs e)
{
Graphics gp = CreateGraphics();
if (a > 140 || b > 140)
{
if (c > 10 || d > 10) {
c -= 1;
d -= 1;
gp.DrawEllipse(Pens.Red, c, d, 1, 1);
gp.DrawEllipse(Pens.Blue, c+1, d+1, 1, 1);
}
}
else { a += 1;
b += 1;
gp.DrawEllipse(Pens.Blue, a, b, 1, 1); }
if(c<11||d<11)
{
int a = 10;
int b = 10;
//终止坐标
int c = 140;
int d = 140;
}
{
int a = 10;
int b = 10;
//终止坐标
int c = 140;
int d = 140;
}
这个加在 timer1_Tick()结尾括号里。我的代码貌似最后少了个}
到达c/d 点, start =0
if(start = 1)
{
向c/d 移动
if(到达结束点)
start = 0;
}
else
{
向a/b 移动
if(到达起点)
start = 1;
}
2.确定你的增量(即确定以x坐标还是y坐标为基准,每次的增量是多少);
3.计算直线方程;
4.添加一个方向变量(bool即可)
5.根据方向变量确定终点坐标判断是否到达,同时判断增量的正负;
6.根据直线方程与增量计算出当前点坐标;画点;
private Point pt2 = new Point(140, 140); //终点坐标 private int n = 0; //运动点离起点的距离
private bool bDirect = true;//true为从起点向终点运行,false从终点向起点运行
Point pt = new Point(0,0); //当前点
private void timer1_Tick(object sender, EventArgs e)
{
int m =(int) Math.Pow(Math.Pow((pt2.X - pt1.X), 2) + Math.Pow((pt2.Y - pt1.Y), 2), 0.5);//总距离
if (n == m)
bDirect = false;
if (n == 0)
bDirect = true; if (bDirect)
n++;
else
n--;
Pen p1=new Pen(Color.Black);
Pen p2=new Pen(Color.Red);
Graphics g = this.CreateGraphics();
if (pt.X != 0 && pt.Y != 0) //清除上次的运动点
{
g.DrawEllipse(new Pen(this.BackColor) , pt.X - 2, pt.Y - 2, 4, 4); //清除上次的运动点
} g.DrawLine(p1, pt1, pt2);//画起点到终点的线
pt.X = ((pt2.X - pt1.X) * n) / m + pt1.X;
pt.Y = ((pt2.Y - pt1.Y)) * n / m + pt1.Y; g.DrawEllipse(p2, pt.X - 2, pt.Y - 2, 4, 4); //画运动的点
g.Dispose();
} private void button1_Click(object sender, EventArgs e)
{
timer1.Enabled = true;
}