| 
 
| 赞 | 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座标]
 | 
 |