设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 4157|回复: 31
打印 上一主题 下一主题

谁能帮我看一下这个鼠标。。。

 关闭 [复制链接]

Lv2.观梦者

傻♂逼

梦石
0
星屑
374
在线时间
1606 小时
注册时间
2007-3-13
帖子
6562

烫烫烫开拓者

跳转到指定楼层
1
发表于 2008-6-19 05:51:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
  1. #==============================================================================
  2. # ■ Mouse
  3. #------------------------------------------------------------------------------
  4. #  不掉FPS的DLL鼠标。
  5. #==============================================================================

  6. class Mouse
  7.   # 定义变量
  8.   DLL = 'Mouse'
  9.   $GetActiveWindow = Win32API.new("user32", "GetActiveWindow", nil, 'l')
  10.   $hWnd = $GetActiveWindow.call
  11.   $Get_Pos_X = Win32API.new(DLL, 'Get_Pos_X', nil, 'l')
  12.   $Get_Pos_Y = Win32API.new(DLL, 'Get_Pos_Y', nil, 'l')
  13.   $Left = Win32API.new(DLL, 'Get_Left', nil, 'l')
  14.   $Right = Win32API.new(DLL, 'Get_Right', nil, 'l')
  15.   $Updata = Win32API.new(DLL, 'Updata_Mouse', nil, 'l')
  16.   $Mouse_Close =  Win32API.new(DLL, 'Mouse_Close', nil, nil)
  17.   $Mouse_Start = Win32API.new(DLL, 'Mouse_Start', 'l', 'l')
  18.   #结束变量的定义
  19.   def init
  20.     $Mouse_Start.call($hWnd)
  21.     @x = 0
  22.     @y = 0
  23.     @left = false
  24.     @right = false
  25.     @cursor = Sprite.new
  26.     @cursor.bitmap = Cache.system("cursor1.png")
  27.     @cursor.z = 99999
  28.   end
  29.   def update
  30.     err = $Updata.call
  31.     if err != 0
  32.       raise "Up Mouse System Error..."
  33.     end
  34.     @x = $Get_Pos_X.call
  35.     @y = $Get_Pos_Y.call
  36.     @cursor.x = @x
  37.     @cursor.y = @y
  38.     l = $Left.call
  39.     r = $Right.call
  40.     if l == 1
  41.       @left = true
  42.     else
  43.       @left = false
  44.     end
  45.     if r == 1
  46.       @right = true
  47.     else
  48.       @right = false
  49.     end
  50.   end
  51.   def end
  52.     $Mouse_Close.call
  53.   end
  54.   def click_on(button)
  55.     if button = "L"
  56.       if @left
  57.         return true
  58.       end
  59.     end
  60.     if button = "R"
  61.       if @right
  62.         return true
  63.       end
  64.     end
  65.   end
  66.   def self.pos
  67.     return @x,@y
  68.   end
  69. end
  70. #==============================================================================
  71. # ■ Graphics
  72. #------------------------------------------------------------------------------
  73. #  图象模块,添加鼠标支持。
  74. #==============================================================================

  75. class << Graphics
  76.   
  77.   alias origin_update update
  78.   
  79.   def update
  80.     origin_update
  81.     $mouse.update
  82.   end
  83.   
  84. end
  85. $mouse = Mouse.new
  86. $mouse.init
复制代码

Dll是自制的哦~~
DLL:http://rpg.blue/upload_program/files/Mouse_94254616.rar
   Dll是米有问题滴~~
能改就改吧。
dll代码
  1. Private Type POINTAPI
  2. x As Long
  3. Y As Long
  4. End Type
  5. Dim p As POINTAPI
  6. Dim l As Long
  7. Dim hd As Long
  8. Dim KeyTepy(1) As Integer
  9. Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
  10. Private Declare Function ScreenToClient Lib "user32" (ByVal hWnd As Long, lpPoint As POINTAPI) As Long
  11. Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
  12. Private Declare Function ShowCursor Lib "user32" (ByVal bShow As Long) As Long
  13. Private Function Get_Pos_X() As Long
  14. If p.x < 0 Then
  15.   p.x = 0
  16. End If
  17. If p.x > 544 Then
  18.   p.x = 544
  19. End If
  20. Get_Pos_X = p.x
  21. End Function
  22. Private Function Get_Pos_Y() As Long
  23. If p.Y < 0 Then
  24.   p.Y = 0
  25. End If
  26. If p.Y > 416 Then
  27.   p.Y = 416
  28. End If
  29. Get_Pos_Y = p.Y
  30. End Function
  31. Private Function Get_Left() As Integer
  32.   Get_Left = KeyTepy(0)
  33. End Function
  34. Private Function Get_Right() As Integer
  35.   Get_Right = KeyTepy(1)
  36. End Function
  37. Private Function Updata_Mouse() As Long
  38. If Mouse_Open = True Then
  39.    Call GetCursorPos(p)
  40.    l = ScreenToClient(hd, p)
  41.    Dim x     As Long
  42.    x = GetAsyncKeyState(1)       '左键
  43.    'KeyTepy = 0
  44.    If x = -32767 Then
  45.      KeyTepy(0) = 1
  46.     Else
  47.      KeyTepy(0) = 0
  48.    End If
  49.    
  50.    x = GetAsyncKeyState(2)       '右键
  51.    If x = -32767 Then
  52.      KeyTepy(1) = 1
  53.     Else
  54.      KeyTepy(1) = 0
  55.    End If
  56.    Updata_Mouse = 0
  57. Else
  58.    Updata_Mouse = 1
  59. End If
  60. End Function
  61. Sub Mouse_Close()
  62.    ShowCursor (1)
  63.    l = ""
  64.    hd = ""
  65.    KeyTepy(0) = 0
  66.    KeyTepy(1) = 0
  67.     Mouse_Open = False
  68. End Sub
  69. Private Function Mouse_Start(hWnd As Long) As Long
  70.    ShowCursor (0)
  71.    hd = hWnd
  72.    Mouse_Open = True
  73.    Mouse_Start = 0
  74. End Function
  75. ''''''''''''''''''''''''''''''''''''''''''''''''
  76. ''    DLL PROJECT ?004 DanSoft Australia     ''
  77. ''   Your dlls MUST HAVE a DLLMain and Main   ''
  78. '' proc, otherwise it won't compile properly! ''
  79. ''''''''''''''''''''''''''''''''''''''''''''''''
  80. Sub Main()
  81.     'This is a dummy, so the IDE doesn't complain
  82.     'there is no Sub Main.
  83. End Sub
  84. Function DLLMain(ByVal hInstDLL As Long, ByVal fdwReason As Long, ByVal lpwReserved As Long) As Long
  85.     DLLMain = 1
  86. End Function

  87. 'add more functions here, ie.
  88. 'Function addition(ByVal A As Double, ByVal B As Double) As Double
  89. '    addition = A + B
  90. 'End Function
复制代码

Dll的输出绝对符合标准!!!
哎呀,蛋疼什么的最有爱了

Lv1.梦旅人

风之塞尔达

梦石
0
星屑
50
在线时间
57 小时
注册时间
2005-10-22
帖子
2492

贵宾

2
发表于 2008-6-19 16:39:22 | 只看该作者
if button = "R"  这语句拿来干什么用?!{/gg}
其实 默认的鼠标脚本是不会掉FPS的, 只是Win32API.call的次数太多
而且 选择光标巨型的哪个函数是for循环... 选项越多 帧数越低
对了, 默认的鼠标脚本每次call也都要对数组一次unpack和pack, 这样慢
在程序里延续塞尔达的传说, 在画板上勾勒塞尔达的轮廓!!
回复 支持 反对

使用道具 举报

Lv2.观梦者

傻♂逼

梦石
0
星屑
374
在线时间
1606 小时
注册时间
2007-3-13
帖子
6562

烫烫烫开拓者

3
 楼主| 发表于 2008-6-19 18:50:49 | 只看该作者
以下引用link006007于2008-6-19 8:39:22的发言:

if button = "R"  这语句拿来干什么用?!
其实 默认的鼠标脚本是不会掉FPS的, 只是Win32API.call的次数太多
而且 选择光标巨型的哪个函数是for循环... 选项越多 帧数越低
对了, 默认的鼠标脚本每次call也都要对数组一次unpack和pack, 这样慢


[本贴由作者于 2008-6-19 9:19:18 最后编辑]

调用 Clickon时告诉程序要传递的是左键还是右键
哎呀,蛋疼什么的最有爱了
回复 支持 反对

使用道具 举报

Lv1.梦旅人

很傻很天真

梦石
0
星屑
55
在线时间
3 小时
注册时间
2007-3-13
帖子
3667
4
发表于 2008-6-19 19:46:23 | 只看该作者
能响应图片吗?


补:
一进去就错误
{/bz}
回复 支持 反对

使用道具 举报

Lv2.观梦者

傻♂逼

梦石
0
星屑
374
在线时间
1606 小时
注册时间
2007-3-13
帖子
6562

烫烫烫开拓者

5
 楼主| 发表于 2008-6-19 19:58:35 | 只看该作者
以下引用火鸡三毛老大于2008-6-19 11:46:23的发言:

能响应图片吗?


补:
一进去就错误



[本贴由作者于 2008-6-19 11:51:48 最后编辑]

就是啊,一进去就死机。
响应图片?
不打算写,主战上多了
哎呀,蛋疼什么的最有爱了
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-4-15
帖子
114
6
发表于 2008-6-19 22:37:49 | 只看该作者
if button = "R"
然道不是恒成立吗!?  {/fd}
回复 支持 反对

使用道具 举报

Lv2.观梦者

傻♂逼

梦石
0
星屑
374
在线时间
1606 小时
注册时间
2007-3-13
帖子
6562

烫烫烫开拓者

7
 楼主| 发表于 2008-6-19 23:23:11 | 只看该作者
以下引用zlink于2008-6-19 14:37:49的发言:

if button = "R"
然道不是恒成立吗!?  

.。。
vb些习惯了 {/fd}

但是,连初始化都不嫩嘎
哎呀,蛋疼什么的最有爱了
回复 支持 反对

使用道具 举报

Lv1.梦旅人

风之塞尔达

梦石
0
星屑
50
在线时间
57 小时
注册时间
2005-10-22
帖子
2492

贵宾

8
发表于 2008-6-20 02:01:54 | 只看该作者
你的 Mouse_Start 函数存在bug
不懂VB  只能知道这么多了 。。。。。。
在程序里延续塞尔达的传说, 在画板上勾勒塞尔达的轮廓!!
回复 支持 反对

使用道具 举报

Lv2.观梦者

傻♂逼

梦石
0
星屑
374
在线时间
1606 小时
注册时间
2007-3-13
帖子
6562

烫烫烫开拓者

9
 楼主| 发表于 2008-6-20 02:04:06 | 只看该作者
以下引用link006007于2008-6-19 18:01:54的发言:

你的 Mouse_Start 函数存在bug
不懂VB  只能知道这么多了 。。。。。。

没问题.
所有函数都无法调用哦 {/gg}
哎呀,蛋疼什么的最有爱了
回复 支持 反对

使用道具 举报

Lv1.梦旅人

风之塞尔达

梦石
0
星屑
50
在线时间
57 小时
注册时间
2005-10-22
帖子
2492

贵宾

10
发表于 2008-6-20 02:08:21 | 只看该作者
= =  
原来是这样。。。
那可能是VB编译出来的dll问题。。
在程序里延续塞尔达的传说, 在画板上勾勒塞尔达的轮廓!!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-12-25 21:03

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表