Project1
标题: 鼠标接触问题 [打印本页]
作者: 决心    时间: 2011-4-23 20:18
标题: 鼠标接触问题
哪位大大能帮我修改下面这个鼠标脚本,让它划过(接触到)事件就执行脚本(显示图片也可以)呢?
实在改不了的话【如果有这样类似的脚本(要在与这个脚本不冲突的情况下)】。。。给我个脚本。。。
谢谢{:nm_4:}- #==============================================================================
 
- # 本脚本来自www.66rpg.com,源自geocities.jp,转载和使用请注明此内容
 
- #
 
- # 初始鼠标图案在35行和64行改,变换的鼠标图案在62行改
 
- # 这个脚本的思路是判断鼠标所在位置是否有事件,所以响应的情况只有一种。
 
- # 如果想有多种响应的话,思路复杂,比如拆分事件名称等,做出来的东西将繁琐。
 
- #                                                           —— JesseKiss 
 
- #==============================================================================
 
- #=================以下两个用来调整战斗时的手感问题,可以自己试试。
 
- $敌人选框扩大 = 20
 
- $角色选框扩大 = 30
 
- #==============================================================================
 
- # API调用
 
- #==============================================================================
 
- $ShowCursor = Win32API.new("user32", "ShowCursor", 'i', 'l')
 
- $GetCursorPos = Win32API.new("user32", "GetCursorPos", 'p', 'i')
 
- $ScreenToClient = Win32API.new("user32", "ScreenToClient", 'ip', 'i')
 
- $GetActiveWindow = Win32API.new("user32", "GetActiveWindow", nil, 'l')
 
- $Window_HWND = $GetActiveWindow.call
 
- $GetKeyState = Win32API.new("user32", "GetKeyState", 'i', 'i')
 
- #$FindWindow = Win32API.new("user32", "FindWindow", 'pp', 'i')
 
- #$HookStart  = Win32API.new("mouse_hook.dll", "HookStart", 'i', nil)
 
- #$HookEnd  = Win32API.new("mouse_hook.dll", "HookEnd", nil, nil)
 
- #$GetMouseStatus  = Win32API.new("mouse_hook.dll", "GetMouseStatus", 'i', 'i')
 
- #$Window_HWND = $FindWindow.call(nil, 'mousetry')
 
 
- module Mouse  
 
-   LEFT = 0x01
 
-   RIGHT = 0x02
 
 
-   def self.init(sprite = nil)
 
- #   $HookStart.call($Window_HWND)
 
-     $ShowCursor.call(0)
 
-     
 
-     @show_cursor = false
 
-     
 
-     @mouse_sprite = Sprite.new
 
-     @mouse_sprite.z = 99999
 
-     @mouse_sprite.bitmap = Bitmap.new('Graphics/Icons/028-Herb04.png')
 
-     #@mouse_sprite.bitmap.fill_rect(Rect.new(0, 0, 32, 32), Color.new(0, 0, 0))
 
 
-     @left_press = false
 
-     @right_press = false
 
-     @left_trigger = false
 
-     @right_trigger = false
 
-     @left_repeat = false
 
-     @right_repeat = false
 
-     @click_lock = false
 
-     
 
-     update
 
-   end
 
-   def self.exit
 
-     @mouse_sprite.bitmap.dispose
 
-     @mouse_sprite.dispose
 
-     @show_cursor = true
 
- #    $HookEnd.call
 
-     $ShowCursor.call(1)
 
-   end
 
-   def self.mouse_debug
 
-     return @mouse_debug.bitmap
 
-   end
 
-   def self.update
 
-     left_down = $GetKeyState.call(0x01)
 
-     right_down = $GetKeyState.call(0x02)
 
-     if $pop == 1
 
-     @mouse_sprite.bitmap = Bitmap.new('Graphics/Icons/049-Skill06.png')
 
-     else
 
-     @mouse_sprite.bitmap = Bitmap.new('Graphics/Icons/028-Herb04.png')
 
-     end
 
-     @click_lock = false
 
-     mouse_x, mouse_y = self.get_mouse_pos
 
-     if @mouse_sprite != nil
 
-       @mouse_sprite.x = mouse_x
 
-       @mouse_sprite.y = mouse_y
 
-     end
 
-     if left_down[7] == 1
 
-       @left_repeat = (not @left_repeat)
 
-       @left_trigger = (not @left_press)
 
-       @left_press = true
 
-     else
 
-       @left_press = false
 
-       @left_trigger = false
 
-       @left_repeat = false
 
-     end
 
-     if right_down[7] == 1
 
-       @right_repeat = (not @right_repeat)
 
-       @right_trigger = (not @right_press)
 
-       @right_press = true
 
-     else
 
-       @right_press = false
 
-       @right_trigger = false
 
-       @right_repeat = false
 
-     end
 
-   end
 
-   def self.get_mouse_pos
 
-     point_var = [0, 0].pack('ll')
 
-     if $GetCursorPos.call(point_var) != 0
 
-       if $ScreenToClient.call($Window_HWND, point_var) != 0
 
-         x, y = point_var.unpack('ll')
 
-         if (x < 0) or (x > 10000) then x = 0 end
 
-         if (y < 0) or (y > 10000) then y = 0 end
 
-         if x > 640 then x = 640 end
 
-         if y > 480 then y = 480 end
 
-         return x, y
 
-       else
 
-         return 0, 0
 
-       end
 
-     else
 
-       return 0, 0
 
-     end
 
-   end
 
-   def self.press?(mouse_code)
 
-     if mouse_code == LEFT
 
-       if @click_lock
 
-         return false
 
-       else
 
-         return @left_press
 
-       end
 
-     elsif mouse_code == RIGHT
 
-       return @right_press
 
-     else
 
-       return false
 
-     end
 
-   end
 
-   def self.trigger?(mouse_code)
 
-     if mouse_code == LEFT
 
-       if @click_lock
 
-         return false
 
-       else
 
-         return @left_trigger
 
-       end
 
-     elsif mouse_code == RIGHT
 
-       return @right_trigger
 
-     else
 
-       return false
 
-     end
 
-   end
 
-   def self.repeat?(mouse_code)
 
-     if mouse_code == LEFT
 
-       if @click_lock
 
-         return false
 
-       else
 
-         return @left_repeat
 
-       end
 
-     elsif mouse_code == RIGHT
 
-       return @right_repeat
 
-     else
 
-       return false
 
-     end
 
-   end
 
-   def self.click_lock?
 
-     return @click_lock
 
-   end
 
-   def self.click_lock
 
-     @click_lock = true
 
-   end
 
-   def self.click_unlock
 
-     @click_lock = false
 
-   end
 
- end
 
- module Input
 
-   if @self_update == nil
 
-     @self_update = method('update')
 
-     @self_press = method('press?')
 
-     @self_trigger = method('trigger?')
 
-     @self_repeat = method('repeat?')
 
-   end
 
-   def self.update
 
-     @self_update.call
 
-     Mouse.update
 
-   end
 
-   def self.press?(key_code)
 
-     if @self_press.call(key_code)
 
-       return true
 
-     end
 
-     if key_code == C
 
-       return Mouse.press?(Mouse::LEFT)
 
-     elsif key_code == B
 
-       return Mouse.press?(Mouse::RIGHT)
 
-     else
 
-       return @self_press.call(key_code)
 
-     end
 
-   end
 
-   def self.trigger?(key_code)
 
-     if @self_trigger.call(key_code)
 
-       return true
 
-     end
 
-     if key_code == C
 
-       return Mouse.trigger?(Mouse::LEFT)
 
-     elsif key_code == B
 
-       return Mouse.trigger?(Mouse::RIGHT)
 
-     else
 
-       return @self_trigger.call(key_code)
 
-     end
 
-   end
 
-   def self.repeat?(key_code)
 
-     if @self_repeat.call(key_code)
 
-       return true
 
-     end
 
-     if key_code == C
 
-       return Mouse.repeat?(Mouse::LEFT)
 
-     elsif key_code == B
 
-       return Mouse.repeat?(Mouse::RIGHT)
 
-     else
 
-       return @self_repeat.call(key_code)
 
-     end
 
-   end
 
- end
 
- class Window_Selectable
 
-   if @self_alias == nil
 
-     alias self_update update
 
-     @self_alias = true
 
-   end
 
-   def update
 
-     #self.cursor_rect.empty
 
-     self_update
 
-     if self.active and @item_max > 0
 
-       index_var = @index
 
-       tp_index = @index
 
-       mouse_x, mouse_y = Mouse.get_mouse_pos
 
-       mouse_not_in_rect = true
 
-       for i in 0...@item_max
 
-         @index = i
 
-         update_cursor_rect
 
-         top_x = self.cursor_rect.x + self.x + 16
 
-         top_y = self.cursor_rect.y + self.y + 16
 
-         bottom_x = top_x + self.cursor_rect.width
 
-         bottom_y = top_y + self.cursor_rect.height
 
-         if (mouse_x > top_x) and (mouse_y > top_y) and
 
-            (mouse_x < bottom_x) and (mouse_y < bottom_y)
 
-           mouse_not_in_rect = false
 
-           if tp_index != @index
 
-             tp_index = @index
 
-             $game_system.se_play($data_system.cursor_se)
 
-           end
 
-           break
 
-         end
 
-       end
 
-       if mouse_not_in_rect
 
-         @index = index_var
 
-         update_cursor_rect
 
-         Mouse.click_lock
 
-       else
 
-         Mouse.click_unlock                
 
-       end
 
-     end
 
-   end
 
- end
 
- class Window_NameInput
 
-   if @self_alias == nil
 
-     alias self_update update
 
-     @self_alias = true
 
-   end
 
-   def update
 
-     #self.cursor_rect.empty
 
-     self_update
 
-     if self.active
 
-       index_var = @index
 
-       mouse_x, mouse_y = Mouse.get_mouse_pos
 
-       mouse_not_in_rect = true
 
-       for i in (0...CHARACTER_TABLE.size).to_a.push(180)
 
-         @index = i
 
-         update_cursor_rect
 
-         top_x = self.cursor_rect.x + self.x + 16
 
-         top_y = self.cursor_rect.y + self.y + 16
 
-         bottom_x = top_x + self.cursor_rect.width
 
-         bottom_y = top_y + self.cursor_rect.height
 
-         #
 
-         if (mouse_x > top_x) and (mouse_y > top_y) and
 
-            (mouse_x < bottom_x) and (mouse_y < bottom_y)
 
-           mouse_not_in_rect = false
 
-           break
 
-         end
 
-       end
 
-       if mouse_not_in_rect
 
-         @index = index_var
 
-         update_cursor_rect
 
-         Mouse.click_lock
 
-       else
 
-         Mouse.click_unlock
 
-       end
 
-     end
 
-   end 
 
- end
 
- class Window_InputNumber
 
-   if @self_alias == nil
 
-     alias self_update update
 
-     @self_alias = true
 
-   end
 
-   def update
 
-     #self.cursor_rect.empty
 
-     self_update
 
-     mouse_x, mouse_y = Mouse.get_mouse_pos
 
-     if self.active and @digits_max > 0
 
-       index_var = @index
 
-       mouse_not_in_rect = true
 
-       for i in 0...@digits_max
 
-         @index = i
 
-         update_cursor_rect
 
-         top_x = self.cursor_rect.x + self.x + 16
 
-         bottom_x = top_x + self.cursor_rect.width
 
-         #
 
-         if (mouse_x > top_x) and (mouse_x < bottom_x)
 
-           mouse_not_in_rect = false
 
-           break
 
-         end
 
-       end
 
-       if mouse_not_in_rect
 
-         @index = index_var
 
-         update_cursor_rect
 
-         Mouse.click_lock
 
-       else
 
-         Mouse.click_unlock
 
-       end
 
-     end
 
-     if @last_mouse_y == nil
 
-       @last_mouse_y = mouse_y
 
-     end
 
-     check_pos = (@last_mouse_y - mouse_y).abs
 
-     if check_pos > 10
 
-       $game_system.se_play($data_system.cursor_se)
 
-       place = 10 ** (@digits_max - 1 - @index)
 
-       n = @number / place % 10
 
-       @number -= n * place
 
-       n = (n + 1) % 10 if mouse_y < @last_mouse_y
 
-       n = (n + 9) % 10 if mouse_y > @last_mouse_y
 
-       @number += n * place
 
-       refresh
 
-       @last_mouse_y = mouse_y
 
-     end
 
-   end
 
- end
 
- class Scene_File
 
-   if @self_alias == nil
 
-     alias self_update update
 
-     @self_alias = true
 
-   end
 
-   def update
 
-     mouse_x, mouse_y = Mouse.get_mouse_pos
 
-     Mouse.click_lock
 
-     idx = 0
 
-     for i in @savefile_windows
 
-       top_x = i.x + 16
 
-       top_y = i.y + 16
 
-       bottom_x = top_x + i.width
 
-       bottom_y = top_y + i.height
 
-       if (mouse_x > top_x) and (mouse_y > top_y) and
 
-          (mouse_x < bottom_x) and (mouse_y < bottom_y)
 
-         i.selected = true
 
-         if @file_index != idx 
 
-           @file_index = idx
 
-           $game_system.se_play($data_system.cursor_se)
 
-         end            
 
-         Mouse.click_unlock
 
-       else
 
-         i.selected = false
 
-       end
 
-       idx += 1
 
-     end
 
-     self_update
 
-   end
 
- end
 
- class Arrow_Enemy
 
-   if @self_alias == nil
 
-     alias self_update update
 
-     @self_alias = true
 
-   end
 
-   def update
 
-     mouse_x, mouse_y = Mouse.get_mouse_pos
 
-     idx = 0
 
-     for i in $game_troop.enemies do
 
-       if i.exist?
 
-         top_x = i.screen_x - self.ox
 
-         top_y = i.screen_y - self.oy
 
-         bottom_x = top_x + self.src_rect.width
 
-         bottom_y = top_y + self.src_rect.height
 
-         if (mouse_x > top_x - $敌人选框扩大) and (mouse_y > top_y - $敌人选框扩大) and
 
-            (mouse_x < bottom_x + $敌人选框扩大) and (mouse_y < bottom_y + $敌人选框扩大)
 
-           if @index != idx
 
-             $game_system.se_play($data_system.cursor_se)
 
-             @index = idx
 
-           end
 
-         end
 
-       end
 
-       idx += 1
 
-     end
 
-     self_update
 
-   end
 
- end
 
- class Arrow_Actor
 
-   if @self_alias == nil
 
-     alias self_update update
 
-     @self_alias = true
 
-   end
 
-   def update
 
-     mouse_x, mouse_y = Mouse.get_mouse_pos
 
-     idx = 0
 
-     for i in $game_party.actors do
 
-       if i.exist?
 
-         top_x = i.screen_x - self.ox
 
-         top_y = i.screen_y - self.oy
 
-         bottom_x = top_x + self.src_rect.width
 
-         bottom_y = top_y + self.src_rect.height
 
-         if (mouse_x > top_x - $角色选框扩大) and (mouse_y > top_y - $角色选框扩大) and
 
-            (mouse_x < bottom_x + $角色选框扩大) and (mouse_y < bottom_y + $角色选框扩大)
 
-           if @index != idx
 
-             $game_system.se_play($data_system.cursor_se)
 
-             @index = idx
 
-           end
 
-         end
 
-       end
 
-       idx += 1
 
-     end
 
-     self_update
 
-   end
 
- end
 
- class Game_Player
 
-   if @self_alias == nil
 
-     alias self_update update
 
-     @self_alias = true
 
-   end
 
-   def update
 
-     mouse_x, mouse_y = Mouse.get_mouse_pos
 
-     $e_id = $game_map.check_event(mouse_x/32,mouse_y/32)
 
-     if $e_id != -1 then 
 
-       $pop = 1
 
-     else
 
-       $pop = 0
 
-     end
 
-     if @last_move_x == nil
 
-       @last_move_x = false
 
-     end
 
- if $game_switches[123]
 
-      if Mouse.press?(Mouse::LEFT)
 
-        for event in $game_map.events.values
 
-          if event.screen_x/32 == mouse_x/32 and event.screen_y/32-1 == mouse_y/32
 
-            event.start
 
-          end
 
-        end
 
-      end
 
-      self_update
 
-      return
 
-    end
 
-     if Mouse.press?(Mouse::LEFT)
 
-       last_moving = moving?
 
-       last_direction = @direction
 
-       unless moving? or $game_system.map_interpreter.running? or
 
-              @move_route_forcing or $game_temp.message_window_showing
 
-         last_x = @x
 
-         if @last_move_x
 
-           @last_move_x = false
 
-         elsif mouse_x > screen_x + 16
 
-           move_right
 
-         elsif mouse_x < screen_x - 16
 
-           move_left
 
-         end
 
-         last_y = @y
 
-         if last_x != @x
 
-           @last_move_x = true
 
-         elsif mouse_y > screen_y
 
-           move_down
 
-         elsif mouse_y < screen_y - 32
 
-           move_up
 
-         end
 
-         if last_y != @y
 
-           @last_move_x = false
 
-         elsif not @last_move_x
 
-           case last_direction
 
-           when 2
 
-             turn_down
 
-           when 4
 
-             turn_left
 
-           when 6
 
-             turn_right
 
-           when 8
 
-             turn_up
 
-           end
 
-         end
 
-       end
 
-     end
 
-     self_update
 
-   end
 
- end
 
- Mouse.init
 
- END { Mouse.exit }
 
 
- class Game_Map
 
- alias check_event_1 check_event
 
-   def check_event(x, y)
 
-     for event in $game_map.events.values
 
-       if event.screen_x/32 == x and event.screen_y/32-1 == y
 
-         return event.id      
 
-       end
 
-     end
 
-     return -1
 
-   end
 
- end