Project1
标题:
如何制作动态鼠标的效果?
[打印本页]
作者:
asdddhr1989as
时间:
2012-1-3 10:22
标题:
如何制作动态鼠标的效果?
我用了一鼠标脚本很好用!但如何把鼠标改成动态的? dsu_plus_rewardpost_czw
作者:
拉羅卡特
时间:
2012-1-3 11:58
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座标]
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1