赞 | 0 |
VIP | 0 |
好人卡 | 0 |
积分 | 0 |
经验 | 6326 |
最后登录 | 2017-9-16 |
在线时间 | 579 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 48
- 在线时间
- 579 小时
- 注册时间
- 2011-5-30
- 帖子
- 497
|
- module Sword_M
- =begin
- ● 设置方法
- 设置滑鼠游标:Sword_M.cache('图片档案名称')
- Sword_M.cache('图片档案名称', 不透明度)
- 清除滑鼠游标:Sword_M.cache
- 判断滑鼠游标:Sword_M.cache?
- 更新游标位置:Sword_M.update
- 判断滑鼠矩形:Sword_M.rect?(X座标, Y座标, 宽度, 高度)
- 获取滑鼠座标:Sword_M.coord
- ========================================
- 详细设置说明请参考:http://blog.yam.com/a870053jjkj/article/29270759
- =end
- #=======================================
- module_function
- $Sword ? $Sword[59] = true : $Sword = {59=>true} # 脚本使用标志
- $Sword_F12_Error = {} unless $Sword_F12_Error # F12除错标志
- ($Sword_VX = false ; RPG::Weather rescue $Sword_VX = true) if $Sword_VX == nil
- #-------------------------------------------------------------
- #● 常量定义(Win32API)
- Window = Win32API.new('user32','GetForegroundWindow', %(v), 'l')
- ScreenToClient = Win32API.new('user32', 'ScreenToClient', %(i p), 'i')
- GetCursorPos = Win32API.new('user32', 'GetCursorPos', %(p), 'i')
- ShowCursor = Win32API.new('user32','ShowCursor', %(l), 'l')
- ShowCursor.call(0) # 隐藏原本的滑鼠游标
- #-------------------------------------------------------------
- #● 设定滑鼠游标图片(图片档案名称, 滑鼠不透明度)
- def cache(name = nil, opacity = 255)
- (@mouse.dispose ; @mouse = nil) if @mouse
- return if name == nil # 没指定图片档案名称就中断
- @mouse = Sprite.new ; @mouse.bitmap = $Sword_VX ?
- Cache.picture(name) : RPG::Cache.picture(name) # 产生滑鼠游标图片
- @mouse.opacity, @mouse.z = opacity, 9999
- update # 更新游标的显示位置
- end
- #-------------------------------------------------------------
- #● 判断滑鼠游标是否已经产生
- def cache? ; @mouse ? true : false ; end
- #-------------------------------------------------------------
- #● 更新滑鼠游标的显示位置
- def update
- return unless cache? # 滑鼠尚未生成就中断
- inate = coord ; @mouse.x, @mouse.y = inate[0], inate[1]
- end
- #-------------------------------------------------------------
- #● 获取滑鼠座标
- def coord
- pointapi1, pointapi2 = "\000" * 64, "\000" * 64 # 设置储存区
- GetCursorPos.call(pointapi1) ; xy1 = pointapi1.unpack('ll')
- ScreenToClient.call(Window.call, pointapi2)
- xy2 = pointapi2.unpack('ll')
- [xy1[0] + xy2[0], xy1[1] + xy2[1]] # 返回滑鼠座标
- end
- #-------------------------------------------------------------
- #● 产生滑鼠判定矩形(X座标, Y座标, 宽度, 高度)
- def rect?(x, y, width, height)
- xy = coord # 获取滑鼠座标
- ((x..width + x) === xy[0] and (y..height + y) === xy[1]) ? true : false
- end
- end
- #=======================================
- #□ 进行有关全体图像处理的模块(类对象)
- class << Graphics
- #-------------------------------------------------------------
- #● 更新游戏画面
- alias sword59_update update unless $Sword_F12_Error[59]
- def update
- xy = Sword_M.coord ; Sword_M.update # 更新滑鼠游标位置
- sword59_update
- end
- end
- $Sword_F12_Error[59] = true # F12除错标志开启
复制代码 设置方法
设置滑鼠游标图形
Sword_M.cache # 清除滑鼠游标图形Sword_M.cache('图片档案名称') # 产生滑鼠游标图形Sword_M.cache('图片档案名称', 不透明度) # 产生滑鼠游标图形(顺便设定不透明度)
你装这脚本之後,没执行这个脚本,是没办法在你的游戏画面中看到滑鼠游标图形的
可以执行这个脚本产生滑鼠游标图形,在次使用可以将会采用新设定的滑鼠图标之图形
图片档案名称:设定滑鼠游标的图片档案名称,滑鼠游标图片请放在Pictures资料夹中
不透明度:设定滑鼠游标的不透明程度,可设为0~255的数值,数值越低则滑鼠就越透明
如果省略这个设定,基本上不透明度预设设为255
判断是否已经产生滑鼠游标图形
Sword_M.cache?p Sword_M.cache? # 捡视是否已经产生if Sword_M.cache? # 条件分歧:当滑鼠游标图形产生的场合
end
判断是否有用已经产生了滑鼠游标的图形,游标不透明度很低到看不到不代表没产生过
要实际消除滑鼠游标,直接执行『Sword_M.cache』脚本就好,不必附带参数
《返回值》已经产生了滑鼠游标图形就返回true;还尚未产生滑鼠游标图形就返回false
更新游标的显示位置
Sword_M.update
更新产生出来的滑鼠游标图形显示的位置,要让游标跟着你的滑鼠移动需要这个脚本
不过基本上不用特意去执行这个脚本,通常只要有执行『Graphics.update』脚本就会自动使用
判断滑鼠是否在指定的范围内
Sword_M.rect?(X座标, Y座标, 宽度, 高度)
和产生窗口的原理类似,在指定的座标设为原点,伸展出指定宽高的范围(以下称矩形)
模拟判断滑鼠游标的点处是否在你所指定的矩形范围之中
《返回值》当滑鼠的点在矩形范围内的话返回true;不再矩形内的话就返回false
获取滑鼠的点的座标
Sword_M.coord # 获取滑鼠座标数组,分别为 [X座标, Y座标]Sword_M.coord[0] # 只获取X座标Sword_M.coord[1] # 只获取Y座标
刚刚介绍了可以判断滑鼠是否在某个范围内,但有时也会想实际知道滑鼠目前指着的座标在哪吧
这个脚本可以获取目前滑鼠的点座标之用
在次强调,滑鼠座标的原点座标是在游戏显示画面左上角(不含窗口外边)
所以滑鼠在左边或上面的窗口范围外,可能会获取到负数的值(数字左边多个 - 符号为负数)
《返回值》返回一个有两个单元的数组,分别为 [X座标, Y座标] |
|