赞 | 0 |
VIP | 0 |
好人卡 | 2 |
积分 | 1 |
经验 | 11310 |
最后登录 | 2022-6-16 |
在线时间 | 305 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 60
- 在线时间
- 305 小时
- 注册时间
- 2009-8-21
- 帖子
- 119
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 wxs29 于 2010-12-10 12:11 编辑
- #==============================================================================
- # ** 鼠标输出模块 (修复)
- #------------------------------------------------------------------------------
- # by DerVVulfman
- # 版本 1.2
- # 08-18-2007
- #------------------------------------------------------------------------------
- # 建立在鼠标输出模块...
- #
- # by Near Fantastica
- #------------------------------------------------------------------------------
- # Set_Pos feature by
- # Freakboy
- #------------------------------------------------------------------------------
- #
- # CALLS:
- #
- # Mouse.click?
- # 判断鼠标是否真的按下(Ture/False).
- # 这个值控制您按下的是左/右键,还是中键
- #
- # Mouse.press?
- # 判断鼠标是否真的按下/保持按下状态
- # 这个值控制您按下的是左/右键,还是中键
- # Mouse.pixels
- # Mouse.pixels
- # 这个值返回鼠标所在的坐标(640*480大小),如果鼠标超出游戏画面,这个值为空
- #
- # Mouse.tiles
- # This returns the mouse's screen coordinates in map tiles. Based on the
- # system's 20x15 tile size, this returns it in index values (a 0-19 width &
- # a 0-14 height). This functions the same manner as Mouse.pixels.
- #
- # Mouse.set_pos
- # This allows you to forcefully position the mouse at an x/y position within
- # the game screen by pixel coordinates. Given the game's normal screen width
- # of 640x480, adding: Mouse.set_pos(320,240) should position the mouse dead
- # center of the gaming window.
- #
- # Mouse.update
- # Add this routine into your update routines to update the mouse position.
- # It must be called otherwise you won't get valid mouse coordinates.
- #
- #==============================================================================
- module Mouse
- @mouse_menu = 0
- #--------------------------------------------------------------------------
- # * 鼠标点击
- # button : button
- #--------------------------------------------------------------------------
- def Mouse.click?(button)
- return true if @keys.include?(2) and button == 2
- return true if @keys.include?(button) and $click_abled
- return false
- end
- #--------------------------------------------------------------------------
- # * 鼠标击键
- # button : button
- #--------------------------------------------------------------------------
- def Mouse.press?(button)
- return true if @press.include?(button)
- return false
- end
- #--------------------------------------------------------------------------
- # * 鼠标按下
- # button : button
- #--------------------------------------------------------------------------
- def Mouse.area?(x, y, width=32, height=32)
- return false if @pos == nil
- return true if @pos[0] >= x and @pos[0] <= (x+width) and @pos[1] >= y and @pos[1] <= (y+height)
- return false
- end
- #--------------------------------------------------------------------------
- # * 坐标
- #--------------------------------------------------------------------------
- def Mouse.pixels
- return @pos == nil ? [0, 0] : @pos
- end
- #--------------------------------------------------------------------------
- # * 鼠标初始坐标
- #--------------------------------------------------------------------------
- def Mouse.tiles
- return nil if @pos == nil
- x = @pos[0] / 32
- y = @pos[1] / 32
- return [x, y]
- end
- #--------------------------------------------------------------------------
- # * 设置鼠标初始坐标
- #--------------------------------------------------------------------------
- def Mouse.set_pos(x_pos=0, y_pos=0)
- width, height = Mouse.client_size
- if (x_pos.between?(0, width) && y_pos.between?(0, height))
- x = Mouse.client_pos[0] + x_pos; y = Mouse.client_pos[1] + y_pos
- Win32API.new('user32', 'SetCursorPos', 'NN', 'N').call(x, y)
- end
- end
- #--------------------------------------------------------------------------
- # * Mouse Update
- #--------------------------------------------------------------------------
- def Mouse.update
- @pos = Mouse.pos
- @keys, @press = [], []
- @keys.push(1) if Win32API.new("user32","GetAsyncKeyState",['i'],'i').call(1) & 0X01 == 1
- @keys.push(2) if Win32API.new("user32","GetAsyncKeyState",['i'],'i').call(2) & 0X01 == 1
- @keys.push(3) if Win32API.new("user32","GetAsyncKeyState",['i'],'i').call(4) & 0X01 == 1
- @press.push(1) if Win32API.new("user32","GetKeyState",['i'],'i').call(1) & 0X01 == 1
- @press.push(2) if Win32API.new("user32","GetKeyState",['i'],'i').call(2) & 0X01 == 1
- @press.push(3) if Win32API.new("user32","GetKeyState",['i'],'i').call(4) & 0X01 == 1
- end
- #--------------------------------------------------------------------------
- # * Automatic functions below
- #--------------------------------------------------------------------------
- #
- #--------------------------------------------------------------------------
- # * Obtain Mouse position in screen
- #--------------------------------------------------------------------------
- def Mouse.global_pos
- pos = [0, 0].pack('ll')
- if Win32API.new('user32', 'GetCursorPos', 'p', 'i').call(pos) != 0
- return pos.unpack('ll')
- else
- return nil
- end
- end
- #--------------------------------------------------------------------------
- # * 返回鼠标坐标
- #--------------------------------------------------------------------------
- def Mouse.pos
- x, y = Mouse.screen_to_client(*Mouse.global_pos)
- width, height = Mouse.client_size
- begin
- if (x >= 0 and y >= 0 and x < width and y < height)
- return x, y
- else
- return nil
- end
- rescue
- return nil
- end
- end
- #--------------------------------------------------------------------------
- # * Pass Screen to Game System
- #--------------------------------------------------------------------------
- def Mouse.screen_to_client(x, y)
- return nil unless x and y
- pos = [x, y].pack('ll')
- if Win32API.new('user32', 'ScreenToClient', %w(l p), 'i').call(Mouse.hwnd, pos) != 0
- return pos.unpack('ll')
- else
- return nil
- end
- end
- #--------------------------------------------------------------------------
- # * 得到游戏屏幕高度
- #--------------------------------------------------------------------------
- def Mouse.hwnd
- game_name = "\0" * 256
- Win32API.new('kernel32', 'GetPrivateProfileStringA', %w(p p p p l p), 'l').call('Game','Title','',game_name,255,".\\Game.ini")
- game_name.delete!("\0")
- return Win32API.new('user32', 'FindWindowA', %w(p p), 'l').call('RGSS Player',game_name)
- end
- #--------------------------------------------------------------------------
- # * 得到游戏屏幕宽度
- #--------------------------------------------------------------------------
- def Mouse.client_size
- rect = [0, 0, 0, 0].pack('l4')
- Win32API.new('user32', 'GetClientRect', %w(l p), 'i').call(Mouse.hwnd, rect)
- right, bottom = rect.unpack('l4')[2..3]
- return right, bottom
- end
- #--------------------------------------------------------------------------
- # * 得到窗口坐标
- #--------------------------------------------------------------------------
- def Mouse.client_pos
- rect = [0, 0, 0, 0].pack('l4')
- Win32API.new('user32', 'GetWindowRect', %w(l p), 'i').call(Mouse.hwnd, rect)
- left, upper = rect.unpack('l4')[0..1]
- return left+4, upper+30
- end
- end
复制代码 如何判断按下鼠标左键? |
|