菜鸟问个简单问题,我在窗体上有一个image控件,图片是个动画人物,我想通过点击鼠标,图片移动到鼠标点击的地方,我的代码是一下子到了那里,怎么让他缓慢的移动到那

  • 主题发起人 主题发起人 xiaoxiami1
  • 开始时间 开始时间
X

xiaoxiami1

Unregistered / Unconfirmed
GUEST, unregistred user!
菜鸟问个简单问题,我在窗体上有一个image控件,图片是个动画人物,我想通过点击鼠标,图片移动到鼠标点击的地方,我的代码是一下子到了那里,怎么让他缓慢的移动到那里???(68分)<br />我的代码:

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
image1.Left:=x;
image1.top:=y;
end;
怎么让他缓慢移动到那里??
 
用一个循环,逐步递增Left,Top的值。
同时可能还需要调用application.processmessages来刷新屏幕
 
在mousedown过程里记下旧的位置,然后设变量i,distance,让distance等于旧位置和新位置(x,y)之间的距离,剩下的事情就是用循环来做了,每循环一次,distance=distance-1,sleep(200)
 
用一个时钟控件也行啊
 
上面的方法应该都可以实现
但用这种IMAGE的方法效果不会很好,有时会有闪烁现象,特别是图象比较大的时候
 
如云大侠说的有点意思,能否更详细一点,我是菜鸟一只啊。
 
就像做数学题了
算法:
k表示斜率,k=(y-oldtop)/(x-oldleft)
step表示步进值,deltax,deltay是增量x,增量y
for i:=1 to step do
begin
image1.left=image1.left+deltax
image1.top=image1.top+deltay
delay(200)
end;
deltax,deltay你自己算一下
 
菜鸟太笨了,始终做不好。。请大家继续帮忙。
 
延时+双缓冲
设置一个timer设定移动速度
在你的form.create里面加一句
Form1.DoubleBuffered :=true;//保证不闪烁了
 
可以试试Bitblt这个函数,隔一段时间重画,保证不烦,还不闪烁。试试看,只要你查一下这个函数的格式就行了。
 
不要用delphi做用openGL做
 
多人接受答案了。
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部