关于图片在背景上平滑移动的问题!(解决问题,另外开贴送分)

xiaxx 2005-02-27 02:33:04
要实现的功能是这样的:
在picturebox控件上有一副背景图片(一个腔体),要使一副图片(一个活塞的图片)在在背景图上
平滑的移动,我的方法如下:
Dim picTp As Picture
Set picTp = LoadPicture(".\pic\mlt.jpg") '活塞的图片文件

Private Sub Timer1_Timer() ‘使用timer控件

’移动控制部分
If iNewPos < 700 Or iNewPos > 1800 Then
bDirect = Not bDirect
End If

If bDirect Then
iCd = 10
Else
iCd = -10
End If

iNewPos = iNewPos + iCd

'画图
Picture1.PaintPicture picTp(0), 1530, iNewPos
End Sub

出现几个问题:
1、新画出来的图片覆盖了背景图片的一部分,不能达到显示要求,
问题1是如何使画出的图片显示有图形的部分,空白的部分能让下面
的背景显示出来?(100分)
2、图片画到新位置后,如何清除掉原位置图片,我试过每次paintpicture后
picture1.cls,但闪烁太厉害,我想是否能还是通过paintpicture的Opcode
参数实现原位置的重画,使图形消除。看了论坛上好多关于什么双缓冲的讨论
,好象讲得不是很清楚,不得要领,还请高人指点(100分)
3、由于手头的msdn盘坏了,查不到帮助,哪位高手能把opcode的参数贴一下
(50分)
总之就是要实现在背景上实现一个活塞移动的过程,有其他解决方案亦可,
请附代码解释。
...全文
185 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xinliangyu 2005-03-01
  • 打赏
  • 举报
回复
思路大致可如下:
建立两个内存DC,设名为hdc1与hdc2,大小与背景图相同。hdc1用于保存背景图,hdc2用于作预处理。将不断将反映小图移动的效果在hdc2中预处理,处理后的图贴到picturebox控件或窗体上。这种方法可以避免闪烁。这也是所有游戏中处理图形移动的标准方法[使用directx的除外]。
1 使用你载入活塞图片的方法向一个stdPicture对象加载背景图像,再使用stretchblt[或bltbit]将该图像复制到hdc1中
2 每次移动,都将hdc1中背景图重新复制到hdc2中,将活塞图用TransparentBlt[其实可以使用其他方法作镂空]复制到hdc2中当前移动到的位置,然后将hdc2中的图像转画到对窗体或pictruebox等对象上

xinliangyu 2005-03-01
  • 打赏
  • 举报
回复
至于问题2,要想不闪烁,使用所谓双缓冲应是较好的方法,特别是考虑到还有透空[问题1]。
xinliangyu 2005-03-01
  • 打赏
  • 举报
回复
对于问题1,可使用API函数TransparentBlt解决。
homezj 2005-02-28
  • 打赏
  • 举报
回复
你没用API,而采用paintpicture,也是可以的。
将Picture1.AutoRedraw=True,就相当于你所向往的双缓冲

然后,大胆的使用picture1.cls,就不会闪了。

若picture1中有其它控件,你还需将ClipControls=True
注意:其它控件,不能是Label、Image等轻量级控件,否则控件还是会闪的。
xiaxx 2005-02-27
  • 打赏
  • 举报
回复
多谢关注,能不能具体点,费心了
aohan 2005-02-27
  • 打赏
  • 举报
回复
http://www.bynt.net/Info/29079.html

http://www.pcsky.cn/pcedu/infoview/Article_3608.html
http://www.yzcc.com/2004/11-22/10523583585.html

809

社区成员

发帖
与我相关
我的任务
社区描述
VB 多媒体
社区管理员
  • 多媒体
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧