转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> VB.NET程序 >> 正文
Drawing & Animation I         ★★★★

Drawing & Animation I

作者:闵涛 文章来源:闵涛的学习笔记 点击数:2588 更新时间:2009/4/23 16:39:27
dStart command button. This enables the timer, and the sprite will start moving.

The code to move the sprite is in the Timer event of the Timer control:


Private Sub TimerMove_Timer()
Static X As Long
Static Y As Long

X = X + 1
Y = Y + 1

''''Keep the ball of the edge
If X > Me.ScaleWidth Then
    X = 0
End If

If Y > Me.ScaleHeight Then
    Y = 0
End If

BitBlt Me.hDC, X, Y, SpriteWidth, SpriteHeight, picMask.hDC, 0, 0, vbSrcAnd
BitBlt Me.hDC, X, Y, SpriteWidth, SpriteHeight, picSprite.hDC, 0, 0, vbSrcPaint

End Sub


We have two static variables, X and Y, which will be used as our drawing point on the form. These are increased by 1 each time the event is fired. After incrementing the variables, we check to see if they have gotten past the edge of the form. If they are out of bounds they are reset to 0. Each time this is done, we will draw the sprite using the BlitBlt function.

Try to run the program, it does not look pretty. All you see is a long blue line being drawn on the form. The reason for this behavior is obvious if we think about it. We draw the sprite repeatedly but we do not erase the previous drawn sprite, so it will still be there when the timer event is fired. To deal with this we can insert a Me.Cls call, which will clear the form. Modify the code so it looks like this:


Private Sub TimerMove_Timer()
Static X As Long
Static Y As Long

X = X + 1
Y = Y + 1

''''Keep the ball of the edge
If X > Me.ScaleWidth Then
    X = 0
End If

If Y > Me.ScaleHeight Then
    Y = 0
End If


 
Me.Cls
 
BitBlt Me.hDC, X, Y, SpriteWidth, SpriteHeight, picMask.hDC, 0, 0, vbSrcAnd
BitBlt Me.hDC, X, Y, SpriteWidth, SpriteHeight, picSprite.hDC, 0, 0, vbSrcPaint

End Sub

 


Now the Sprite moves as a single ball over the form. The animation isn''''t too pretty since it flickers and 憌obbles?as it moves along. Depending on the power of your computer, you might also see the black mask ball a few times. Why does it do this? The answer is that we do not synchronize our drawing operation with the redrawing of the form after each Cls operation. So when we draw our sprite we might just be unlucky enough to have drawn it, after the form was finished with redrawing itself. This will result in a form momentarily without our sprite. Since these drawing operations are so fast you will not actually see the sprite missing, but instead just a quick flicker. It''''s as if you had a movie and cut out several frames at random, the action would seem jerky whenever you got to the missing frame.

So what we need is a way to update the form just after we have drawn the sprite, and not during the actual drawing process. This can be achieved with the Refresh method of the form. This method Refreshes (Updates) the form when it is called, which is exactly what we need. But this is not quite enough, since the refresh method will draw the display of the form as it appears in memory. Since we have not stored the sprite in the display memory of the form, it will not be drawn automatically when the Refresh method is called. To store the current display of the form in memory, which would include our sprite, we have to set the Autoredraw property of the form to True. This will store the visual appearance of the form, just the way we want it. The code will then look like this:


Private Sub TimerMove_Timer()
Static X As Long
Static Y As Long

X = X + 1
Y = Y + 1

''''Keep the ball of the edge
If X > Me.ScaleWidth Then
    X = 0
End If

If Y > Me.ScaleHeight Then
    Y = 0
End If


 
Me.Cls
 
BitBlt Me.hDC, X, Y, SpriteWidth, SpriteHeight, picMask.hDC, 0, 0, vbSrcAnd
BitBlt Me.hDC, X, Y, SpriteWidth, SpriteHeight, picSprite.hDC, 0, 0, vbSrcPaint
 
Me.Refresh

End Sub

 

If you try it now, the sprite should move slowly down the form, in a very stately manner.

End of Part I of the three part Drawing and Animation Tutorial by Burt Abreu & S鴕en Skov.

上一页  [1] [2] [3] 


[Sql Server]Sql精妙语句--各种求值函数  [网页制作]网页表格之---多个表格纵向排列
[网页制作]JavaScript另类用法--读取和写入cookie  [网页制作]号称非常安全的上网工具---360安全浏览器介绍
[办公软件]信息技术教学篇---Word工具栏的显示、隐藏及四种菜…  [操作系统]开始菜单---运行命令大总结
[操作系统]网络转载---64位操作系统与32位的区别  [操作系统]ldap:///(没有响应)Windows无法访问指定设备、路径…
[网络技术]安全篇---交换机设置方法介绍  [聊天工具]Real10 & Xpdf installation on Linux Box
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台