t = 32 Else Let Mouse_Rect.Right = 640 - DXMouseX End If
If DXMouseY <= 448 Then Let Mouse_Rect.Bottom = 32 Else Let Mouse_Rect.Bottom = 480 - DXMouseY End If
HotSpot_Rect.Left = DXMouseX HotSpot_Rect.Top = DXMouseY HotSpot_Rect.Right = DXMouseX + 1 HotSpot_Rect.Bottom = DXMouseY + 1
''''如果时机成熟,让鼠标显示. If DXMouseVisible = True Then DrawMouse End If
End Sub
在调用此过程前,不要忘了设置DxmouseHotX,DXMouseHotY和DXMouseVisible变量。 Wow,那个代码很是不少,你会注意到代码前面的多数部分的一半和Lucky的RefreshMouseState(刷新鼠标状态)很相似,那一部分仅仅改变了对屏幕大小和Hot Spot的支持,在Lucky的教程的源代码中,你把你的鼠标指针移出屏幕外(我不是对Lucky的语言攻击,别搞错了)。若将DXMouseHotX从屏幕的宽上减去,将DXMouseHotY从屏幕高上减去,你不得不承认你把鼠标移到屏幕外了,当DXMouseHotX正对着屏幕的右边时,鼠标会停止向右移动,对左边也是如此。
但是,那仅仅是一部分,我们还是必须“剪”下鼠标指针,否则鼠标指针就不能全部消失,那是为什么出现了If...Then...Else...的原因。那些代码会改变Mouse_Rect.Right和Mouse_Rect.Bottom,那时因为当鼠标移出屏幕时会被改变大小,改变 后的Mouse_Rect的Right和Buttom是当时正确的大小。
鼠标被剪了之后,我们若想移动HotSpot_Rect的位置,我们可以改变他的Left,Top,Right和Bottom来实现。
如果你向让鼠标可见,最后两行就是检查鼠标的可见,如果可见,把它画出来
这是一个小小的过程,而且它使用BltFast来在屏幕上化鼠标,使用正确的剪切方法来剪切Mouse_Rect的大小,我不想太过于详细的解说怎样BltFast才算是完成,你最好在Lucky的教程里找找。
Public Sub DrawMouse() SurfBack.BltFast DXMouseX, DXMouseY, SurfMain, Mouse_Rect, DDBLTFAST_SRCCOLORKEY Or DDBLTFAST_WAIT End Sub
SurfBack是我的后备缓存,SurfMain是不可见的表面,SurfMain用来存储鼠标指针图片
特别感谢Lucky和他的DirectX教程
编程愉快,
上一页 [1] [2] 没有相关教程
|