如何实现几副动画在Form内缓慢的、随机的移动(30分)

  • 主题发起人 主题发起人 CGF
  • 开始时间 开始时间
C

CGF

Unregistered / Unconfirmed
GUEST, unregistred user!
望大虾赐教!!!!!!!!!!!!!

 
>如何实现几副动画在Form内缓慢的、随机的移动(30分)
这些画本身还是动的么(不计整体的位置移动)?
不是可以用计时器或者另一个线程调整动画控件的位置吗?
不过如果想要平滑显示(没有闪烁感), 就没有这么简单了
 
pegasus 很有道理, 要随机还要平滑(不跳动), 可是不简单哪。

我想可以设置两个Timer,一个定时随机改变运动方向(间隔长一些),另一个定时
使图画沿着所定方向移动一个定长的距离。如果有几幅图画的话,随机生成几个不同
的方向就是了。
 
等待答案?,。
 
CFG 呀, 等待那位大虾作给你看吧.
 
CFG 老兄呀

缓慢地、随机地等待答案吧, 我是实在没时间作了
 
各位大虾
我仍然专心的等待,因为等待就是艺术,等待就是成功。
 
可你也得告诉我们你等的是什么呀?
 
30分?拜托!
可是如果可以我会回答的!
不过...dwwang说了,等什么呢?
 
如果想要平滑效果, 可以调用API GetUpdateRgn, 具体方法可参考win32.hlp
 
Another_eYes大虾:
您的方法很好,可我对API还缺乏相当的了解,您能说明白一些或举个例子吗?
借此机会也好学习一下。
 
>如果想要平滑效果, 可以调用API GetUpdateRgn, 具体方法可参考win32.hlp
It's not so easy like that.

I suggest CGF friend:
First let the picture animated as you like, look at the effect,
then try to improve it. It is better than "Right here waiting", :)

 
实现几副动画在Form内缓慢的、随机的移动:
是指把几幅图片象放电影预告那样的效果吗:随机出现、移动换位?
如果是这样,我倒做过一个,方法挺笨的:
1:加载每个 Image 到内存
2:为每个 image 建立一个起始、终止坐标和一个 Timer
3:在每个 Timer 事件里改变每个 Image 的内容
(实现每个图框的内容在动)
3:建立一个 bitmap
4:用一个 Timer 读取 Image 当前位移时间的相对坐标变化,将其相对坐标
内容复制到 Bitmap
5:所有 Image 读完后把 Bitmap 复制到显示区(我是用的 Form.Canvas)
(整体图框的内容在动)
这样就实现了类似电影动画的效果



 
首先抱歉, 闪烁的原因主要是因为windows在重画图象时, 会先把原先保存
在缓冲中的图象画上去, 然后根据需要重新画新图象. 如果让windows重画
时不先画原来的图象就能达到平滑的效果了, 这可以通过SetWindowRgn达到
目的.具体没有试过, 我也是从别处的FAQ中看到这个方法的. 它原来的问题
是将一幅透明的图象在屏幕上任意移动而不产生闪烁. 和您的问题大同小异.
抱歉没有时间实验.
 
>不先画原来的图象就能达到平滑的效果了,
据我的经验先画静止不动的部分并不会引起闪烁
闪烁的原因是先擦除了原来的图像, 然后重新画(在新的位置上)
如果不使用双缓冲区的话, 就必须自己计算出图像的变化部分,
尽量少擦除原先的图像
 
我这有个Transparent AVI 控件的原代码, 其中的思路倒是可以借鉴一下的
只要再加上移动整个control的代码就达到您的要求了
该控件可以从delphi super page 找到
 
我怎么在SUPPER PAGE什么也找不到?谁可以帮忙寄一份?
 
去delphi3 jump center看看
 
请各位大虾上
http://www.eng.utoledo.edu/~hchia/screen/screen.htm
下载便可知道我希望开发的模型
 

Similar threads

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