设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1239|回复: 2
打印 上一主题 下一主题

[已经解决] 「旅」的“可以随意取消鼠标功能 ”脚本求修改~~

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
40 小时
注册时间
2009-9-3
帖子
64
跳转到指定楼层
1
发表于 2011-8-19 12:05:08 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 鬼火 于 2011-8-19 18:42 编辑

给孩子做的教学游戏,因为做口算题事件需要大量输入数值,碰到鼠标会改变数值~~~
我用的鼠标脚本是八方向动态的和范例的鼠标脚本有些不同,所以求高人修改下~~~
「旅」的“可以随意取消鼠标功能 ”链接
原工程.rar (3.52 MB, 下载次数: 83)
  1. #==============================================================================
  2. # ■ 完整鼠标系统(八方向)
  3. #------------------------------------------------------------------------------
  4. #  使用时务必配合专用寻路算法
  5. #   By whbm
  6. #==============================================================================
  7. #下面做一下介绍与使用说明:
  8. #    在屏幕上单击鼠标的时候,会自动进行寻路,这里为了速度更快并且为了进行迷
  9. #宫时的难度寻路被限定在当时的屏幕内部。(否则玩家直接点到终点,呵呵....知道
  10. #后果了吧)
  11. #    在角色移动过程中再次单击鼠标(即双击)并在单击第二次鼠标的时候不松手,
  12. #角色将会跟随鼠标方向移动。(这个应该好理解,不用多说吧)当角色贴着欲被启动
  13. #的事件的时候,单击NPC即可启动事件。若未贴着,将会产生自动寻路到NPC附近的某
  14. #点,那时在单击NPC即可。
  15. #    当鼠标停在某些事件上时候会发现有不同的图标,设置方法为:宝箱事件请在事
  16. #件的执行内容中添加 注释,注释内容为 Item 注意大小写。NPC事件请在事件的执行
  17. #内容中添加 注释注释内容为 NPC 注意大小写。若不箱改变某事件的图标,则不要写
  18. #那两个注释。
  19. #    当把脚本转到您工程的时候千万别忘了那个寻路用的脚本。
  20. #==============================================================================
  21. class Game_Event
  22.   attr_accessor :flag
  23. end

  24. #==============================================================================
  25. # ■ Game_Map
  26. #------------------------------------------------------------------------------
  27. #  处理地图的类。包含卷动以及可以通行的判断功能。
  28. # 本类的实例请参考 $game_map 。
  29. #==============================================================================
  30. class Game_Map
  31.   def show_rate(event)
  32.     id = self.map_id
  33.     name = $data_mapinfos[id].name
  34.     if name.include?("★")
  35.       rage = name.split(/★/)[1]
  36.       min_rate = rage.split(/~/)[0].to_f
  37.       max_rate = rage.split(/~/)[1].to_f
  38.       rate =  min_rate + (event.y.to_f / self.height.to_f * (max_rate - min_rate))
  39.       return rate
  40.     else
  41.       rate = 1
  42.     end
  43.   end
  44.   #--------------------------------------------------------------------------
  45.   # ● 检查鼠标处是否有自定义的事件并返回类型
  46.   #--------------------------------------------------------------------------
  47.   def check_event_custom(mouse_x, mouse_y)
  48.     for event in $game_map.events.values #循环所有事件检查
  49.       rate =  show_rate(event)
  50.       event_width = (RPG::Cache.character(event.character_name,event.character_hue).width / $c3_每一步的帧数) * rate
  51.       event_height = (RPG::Cache.character(event.character_name,event.character_hue).height / 8) * rate
  52.       if mouse_x > event.screen_x - event_width / 2 and mouse_x < event.screen_x + event_width / 2 and mouse_y + 32 > event.screen_y + 32 - event_height and mouse_y + 32 < event.screen_y + 32
  53.         for i in 0...event.list.size
  54.           if event.list[i].parameters[0] == "Item" #类型判断
  55.             event.flag = 1
  56.           elsif event.list[i].parameters[0] == "Npc" #类型判断
  57.             event.flag = 2
  58.           else
  59.             event.flag = 0 if $game_player.get_mouse_sta != 2 #无标志
  60.           end
  61.           return event.flag #返回事件类型标志
  62.         end
  63.       end
  64.     end
  65.     return 0 if $game_player.get_mouse_sta != 2 #如果不是在跟随鼠标状态,则返回无标志
  66.     return $mouse_icon_id #使鼠标图不变化
  67.   end
  68.   #--------------------------------------------------------------------------
  69.   # ● 检查鼠标处是否有事件可以开启
  70.   #--------------------------------------------------------------------------
  71.   def check_event_custom_start(mouse_x, mouse_y)
  72.     for event in $game_map.events.values #循环所有事件检查
  73.       #事件角色图片宽度、高度
  74.       rate =  show_rate(event)
  75.       event_width = (RPG::Cache.character(event.character_name,event.character_hue).width / $c3_每一步的帧数) * rate
  76.       event_height = (RPG::Cache.character(event.character_name,event.character_hue).height / 8) * rate
  77.       #判断是否鼠标在事件上
  78.       if mouse_x > event.screen_x - event_width / 2 and mouse_x < event.screen_x + event_width / 2 and mouse_y + 32 > event.screen_y + 32 - event_height and mouse_y + 32 < event.screen_y + 32
  79.         way_x = $game_player.x - event.x
  80.         way_y = $game_player.y - event.y
  81.         if [1,0,-1].include?($game_player.x-event.x) and [1,0,-1].include?($game_player.y-event.y)
  82.           for i in 0...event.list.size
  83.             if ["Item","Npc"].include?(event.list[i].parameters[0]) #当事件属于自定义事件
  84.               #判断主角朝向
  85.               if way_x == -1
  86.                 p_direction = 3 if way_y == -1
  87.                 p_direction = 6 if way_y == 0
  88.                 p_direction = 9 if way_y == 1
  89.               elsif way_x == 0
  90.                 p_direction = 2 if way_y == -1
  91.                 p_direction = 8 if way_y == 1
  92.               else
  93.                 p_direction = 1 if way_y == -1
  94.                 p_direction = 4 if way_y == 0
  95.                 p_direction = 7 if way_y == 1
  96.               end
  97.               event.start #开启事件
  98.               return 1, p_direction #返回即将开启事件以及角色朝向
  99.             end
  100.           end
  101.         end
  102.       end
  103.     end
  104.     return 0, 5 #返回不会开启事件以及角色朝向不变
  105.   end
  106.   #--------------------------------------------------------------------------
  107.   # ● 检查鼠标处是否存在自定义事件 for 寻路
  108.   #--------------------------------------------------------------------------
  109.   def check_event_custom_exist(mouse_x, mouse_y)
  110.     for event in $game_map.events.values #循环所有事件检查
  111.       #事件角色图片宽度、高度
  112.       rate =  show_rate(event)
  113.       event_width = (RPG::Cache.character(event.character_name,event.character_hue).width / $c3_每一步的帧数) * rate
  114.       event_height = (RPG::Cache.character(event.character_name,event.character_hue).height / 8) * rate
  115.       if mouse_x > event.screen_x - event_width / 2 and mouse_x < event.screen_x + event_width / 2 and mouse_y + 32 > event.screen_y + 32 - event_height and mouse_y + 32 < event.screen_y + 32
  116.         for i in 0...event.list.size
  117.           return 1, event if ["Item", "Npc"].include?(event.list[i].parameters[0]) #返回存在自定义事件以及事件体
  118.         end
  119.       end
  120.     end
  121.     return 0, event #返回不存在自定义事件,以及事件体
  122.   end
  123. end
  124. #=================以下两个用来调整战斗时的手感问题,可以自己试试。
  125. $敌人选框扩大 = 20
  126. $角色选框扩大 = 30


  127. #==============================================================================
  128. # ● API调用
  129. #==============================================================================
  130. $ShowCursor = Win32API.new("user32", "ShowCursor", 'i', 'l')
  131. $GetCursorPos = Win32API.new("user32", "GetCursorPos", 'p', 'i')
  132. $ScreenToClient = Win32API.new("user32", "ScreenToClient", 'ip', 'i')
  133. $GetActiveWindow = Win32API.new("user32", "GetActiveWindow", nil, 'l')
  134. $Window_HWND = $GetActiveWindow.call
  135. $GetKeyState = Win32API.new("user32", "GetKeyState", 'i', 'i')
  136. module Mouse  
  137. LEFT = 0x01
  138. RIGHT = 0x02

  139. def self.init(sprite = nil)
  140.    $ShowCursor.call(0)
  141.    
  142.    @show_cursor = false
  143.    
  144.    @mouse_ani_viewport = Viewport.new(0,0,640,480)
  145.    @mouse_ani_viewport.z = 1
  146.    @mouse_ani = RPG::Sprite.new(@mouse_ani_viewport)
  147.    @mouse_ani.z = 1
  148.    
  149.    @mouse_bitmap = Bitmap.new('Graphics/System/Mouse/mouse.png')
  150.    @mouse_sprite = Sprite.new
  151.    @mouse_sprite.z = 99999
  152.    @mouse_sprite.bitmap = Bitmap.new('Graphics/System/Mouse/mouse_1.png')
  153.    @mouse_sprite.bitmap.fill_rect(Rect.new(0, 0, 32, 32), Color.new(0, 0, 0))
  154.    
  155.    $data_animations = load_data("Data/Animations.rxdata")
  156.    @mouse_wait_count = $data_animations[34].frame_max * 2
  157.    @mouse_wait = 0
  158.    @b = 1

  159.    @left_press = false
  160.    @right_press = false
  161.    @left_trigger = false
  162.    @right_trigger = false
  163.    @left_repeat = false
  164.    @right_repeat = false
  165.    @click_lock = false
  166.    
  167.    update
  168. end
  169. def self.exit
  170.    @mouse_sprite.bitmap.dispose
  171.    @mouse_sprite.dispose
  172.    #..........................................................................
  173.    @mouse_ani.dispose
  174.    #..........................................................................
  175.    @show_cursor = true
  176.    $ShowCursor.call(1)
  177. end
  178. def self.mouse_debug
  179.    return @mouse_debug.bitmap
  180. end
  181. #.........................................................................
  182. def self.set_ani(x, y)
  183.    @ani_x = x
  184.    @ani_y = y
  185.    x -= $game_map.display_x / 4
  186.    y -= $game_map.display_y / 4
  187.    @mouse_ani.x, @mouse_ani.y = x, y
  188.    @mouse_ani.animation($data_animations[204],true)
  189.    @mouse_wait = @mouse_wait_count
  190. end
  191. def self.update_ani
  192.    if @mouse_wait > 0
  193.      x = @ani_x
  194.      y = @ani_y
  195.      x -= $game_map.display_x / 4
  196.      y -= $game_map.display_y / 4
  197.      @mouse_ani.x, @mouse_ani.y = x, y
  198.      @mouse_ani.update
  199.      @mouse_wait -= 1
  200.    end
  201. end
  202. #.........................................................................
  203. def self.update
  204.    #.........................................................................
  205.    update_ani
  206.    #.........................................................................
  207.    left_down = $GetKeyState.call(0x01)
  208.    right_down = $GetKeyState.call(0x02)
  209.    if Graphics.frame_count * 3 / Graphics.frame_rate != @total_sec
  210.      @total_sec = Graphics.frame_count * 3 / Graphics.frame_rate
  211.      @a = !@a
  212.    end
  213.    if @b >= 27
  214.      @b = 0
  215.    else
  216.      @b += 1
  217.    end
  218.    if $scene.is_a?(Scene_Map) == false
  219.      $mouse_icon_id = 0
  220.    end
  221.    if $mouse_icon_id != $mouse_icon_id_last
  222.      case $mouse_icon_id
  223.      when 1
  224.        if @a
  225.          @mouse_sprite.bitmap = Bitmap.new('Graphics/Icons/GetItem1')
  226.        else
  227.          @mouse_sprite.bitmap = Bitmap.new('Graphics/Icons/GetItem2')
  228.        end
  229.      when 2
  230.        if @a
  231.          @mouse_sprite.bitmap = Bitmap.new('Graphics/Icons/TalkTo1')
  232.        else
  233.          @mouse_sprite.bitmap = Bitmap.new('Graphics/Icons/TalkTo2')
  234.        end
  235.      when 11
  236.        @mouse_sprite.bitmap = Bitmap.new('Graphics/Icons/Mouse_LOWER_LEFT')
  237.      when 12
  238.        @mouse_sprite.bitmap = Bitmap.new('Graphics/Icons/Mouse_DOWN')
  239.      when 13
  240.        @mouse_sprite.bitmap = Bitmap.new('Graphics/Icons/Mouse_LOWER_RIGHT')
  241.      when 14
  242.        @mouse_sprite.bitmap = Bitmap.new('Graphics/Icons/Mouse_LEFT')
  243.      when 16
  244.        @mouse_sprite.bitmap = Bitmap.new('Graphics/Icons/Mouse_RIGHT')
  245.      when 17
  246.        @mouse_sprite.bitmap = Bitmap.new('Graphics/Icons/Mouse_UPPER_LEFT')
  247.      when 18
  248.        @mouse_sprite.bitmap = Bitmap.new('Graphics/Icons/Mouse_UP')
  249.      when 19
  250.        @mouse_sprite.bitmap = Bitmap.new('Graphics/Icons/Mouse_UPPER_RIGHT')
  251.      when 0
  252.        @mouse_sprite.bitmap = Bitmap.new('Graphics/System/Mouse/mouse_1.png')
  253.      end
  254.      $mouse_icon_id_last = $mouse_icon_id
  255.    else
  256.      case $mouse_icon_id
  257.      when 1
  258.        if @a
  259.          @mouse_sprite.bitmap = Bitmap.new('Graphics/Icons/GetItem1')
  260.        else
  261.          @mouse_sprite.bitmap = Bitmap.new('Graphics/Icons/GetItem2')
  262.        end
  263.      when 2
  264.        if @a
  265.          @mouse_sprite.bitmap = Bitmap.new('Graphics/Icons/TalkTo1')
  266.        else
  267.          @mouse_sprite.bitmap = Bitmap.new('Graphics/Icons/TalkTo2')
  268.        end
  269.      when 0
  270.        x = @b % 4 * 32
  271.        y = @b / 4 * 32
  272.        @mouse_sprite.bitmap.clear
  273.        @mouse_sprite.bitmap.stretch_blt(Rect.new(0,0,32,32),@mouse_bitmap,Rect.new(x,y,32,32))
  274.      end
  275.    end
  276.    @click_lock = false
  277.    mouse_x, mouse_y = self.get_mouse_pos
  278.    if @mouse_sprite != nil
  279.      @mouse_sprite.x = mouse_x
  280.      @mouse_sprite.y = mouse_y
  281.    end
  282.    if left_down[7] == 1
  283.      @left_repeat = (not @left_repeat)
  284.      @left_trigger = (not @left_press)
  285.      @left_press = true
  286.    else
  287.      @left_press = false
  288.      @left_trigger = false
  289.      @left_repeat = false
  290.    end
  291.    if right_down[7] == 1
  292.      @right_repeat = (not @right_repeat)
  293.      @right_trigger = (not @right_press)
  294.      @right_press = true
  295.    else
  296.      @right_press = false
  297.      @right_trigger = false
  298.      @right_repeat = false
  299.    end
  300. end
  301. def self.get_mouse_pos
  302.    point_var = [0, 0].pack('ll')
  303.    if $GetCursorPos.call(point_var) != 0
  304.      if $ScreenToClient.call($Window_HWND, point_var) != 0
  305.        x, y = point_var.unpack('ll')
  306.        if (x < 0) or (x > 10000) then x = 0 end
  307.        if (y < 0) or (y > 10000) then y = 0 end
  308.        if x > 640 then x = 640 end
  309.        if y > 480 then y = 480 end
  310.        return x, y
  311.      else
  312.        return 0, 0
  313.      end
  314.    else
  315.      return 0, 0
  316.    end
  317. end
  318. def self.press?(mouse_code)
  319.    if mouse_code == LEFT
  320.      if @click_lock
  321.        return false
  322.      else
  323.        return @left_press
  324.      end
  325.    elsif mouse_code == RIGHT
  326.      return @right_press
  327.    else
  328.      return false
  329.    end
  330. end
  331. def self.trigger?(mouse_code)
  332.    if mouse_code == LEFT
  333.      if @click_lock
  334.        return false
  335.      else
  336.        return @left_trigger
  337.      end
  338.    elsif mouse_code == RIGHT
  339.      return @right_trigger
  340.    else
  341.      return false
  342.    end
  343. end
  344. def self.repeat?(mouse_code)
  345.    if mouse_code == LEFT
  346.      if @click_lock
  347.        return false
  348.      else
  349.        return @left_repeat
  350.      end
  351.    elsif mouse_code == RIGHT
  352.      return @right_repeat
  353.    else
  354.      return false
  355.    end
  356. end
  357. def self.click_lock?
  358.    return @click_lock
  359. end
  360. def self.click_lock
  361.    @click_lock = true
  362. end
  363. def self.click_unlock
  364.    @click_lock = false
  365. end
  366. end
  367. module Input
  368. if @self_update == nil
  369.    @self_update = method('update')
  370.    @self_press = method('press?')
  371.    @self_trigger = method('trigger?')
  372.    @self_repeat = method('repeat?')
  373. end
  374. def self.update
  375.    @self_update.call
  376.    Mouse.update
  377. end
  378. def self.press?(key_code)
  379.    if @self_press.call(key_code)
  380.      return true
  381.    end
  382.    if key_code == C
  383.      return Mouse.press?(Mouse::LEFT)
  384.    elsif key_code == B
  385.      return Mouse.press?(Mouse::RIGHT)
  386.    else
  387.      return @self_press.call(key_code)
  388.    end
  389. end
  390. def self.trigger?(key_code)
  391.    if @self_trigger.call(key_code)
  392.      return true
  393.    end
  394.    if key_code == C
  395.      return Mouse.trigger?(Mouse::LEFT)
  396.    elsif key_code == B
  397.      return Mouse.trigger?(Mouse::RIGHT)
  398.    else
  399.      return @self_trigger.call(key_code)
  400.    end
  401. end
  402. def self.repeat?(key_code)
  403.    if @self_repeat.call(key_code)
  404.      return true
  405.    end
  406.    if key_code == C
  407.      return Mouse.repeat?(Mouse::LEFT)
  408.    elsif key_code == B
  409.      return Mouse.repeat?(Mouse::RIGHT)
  410.    else
  411.      return @self_repeat.call(key_code)
  412.    end
  413. end
  414. end
  415. class Window_Selectable
  416. if @self_alias == nil
  417.    alias self_update update
  418.    @self_alias = true
  419. end
  420. def update
  421.    self_update
  422.    if self.active and @item_max > 0
  423.      index_var = @index
  424.      tp_index = @index
  425.      mouse_x, mouse_y = Mouse.get_mouse_pos
  426.      mouse_not_in_rect = true
  427.      for i in 0...@item_max
  428.        @index = i
  429.        update_cursor_rect
  430.        top_x = self.cursor_rect.x + self.x + 16
  431.        top_y = self.cursor_rect.y + self.y + 16
  432.        bottom_x = top_x + self.cursor_rect.width
  433.        bottom_y = top_y + self.cursor_rect.height
  434.        if (mouse_x > top_x) and (mouse_y > top_y) and
  435.           (mouse_x < bottom_x) and (mouse_y < bottom_y)
  436.          mouse_not_in_rect = false
  437.          if tp_index != @index
  438.            tp_index = @index
  439.            $game_system.se_play($data_system.cursor_se)
  440.          end
  441.          break
  442.        end
  443.      end
  444.      if mouse_not_in_rect
  445.        @index = index_var
  446.        update_cursor_rect
  447.        Mouse.click_lock
  448.      else
  449.        Mouse.click_unlock               
  450.      end
  451.    end
  452. end
  453. end
  454. class Window_NameInput
  455. if @self_alias == nil
  456.    alias self_update update
  457.    @self_alias = true
  458. end
  459. def update
  460.    self_update
  461.    if self.active
  462.      index_var = @index
  463.      mouse_x, mouse_y = Mouse.get_mouse_pos
  464.      mouse_not_in_rect = true
  465.      for i in (0...CHARACTER_TABLE.size).to_a.push(180)
  466.        @index = i
  467.        update_cursor_rect
  468.        top_x = self.cursor_rect.x + self.x + 16
  469.        top_y = self.cursor_rect.y + self.y + 16
  470.        bottom_x = top_x + self.cursor_rect.width
  471.        bottom_y = top_y + self.cursor_rect.height
  472.        if (mouse_x > top_x) and (mouse_y > top_y) and
  473.           (mouse_x < bottom_x) and (mouse_y < bottom_y)
  474.          mouse_not_in_rect = false
  475.          break
  476.        end
  477.      end
  478.      if mouse_not_in_rect
  479.        @index = index_var
  480.        update_cursor_rect
  481.        Mouse.click_lock
  482.      else
  483.        Mouse.click_unlock
  484.      end
  485.    end
  486. end
  487. end
  488. class Window_InputNumber
  489. if @self_alias == nil
  490.    alias self_update update
  491.    @self_alias = true
  492. end
  493. def update
  494.    self_update
  495.    mouse_x, mouse_y = Mouse.get_mouse_pos
  496.    if self.active and @digits_max > 0
  497.      index_var = @index
  498.      mouse_not_in_rect = true
  499.      for i in 0...@digits_max
  500.        @index = i
  501.        update_cursor_rect
  502.        top_x = self.cursor_rect.x + self.x + 16
  503.        bottom_x = top_x + self.cursor_rect.width
  504.        if (mouse_x > top_x) and (mouse_x < bottom_x)
  505.          mouse_not_in_rect = false
  506.          break
  507.        end
  508.      end
  509.      if mouse_not_in_rect
  510.        @index = index_var
  511.        update_cursor_rect
  512.        Mouse.click_lock
  513.      else
  514.        Mouse.click_unlock
  515.      end
  516.    end
  517.    if @last_mouse_y == nil
  518.      @last_mouse_y = mouse_y
  519.    end
  520.    check_pos = (@last_mouse_y - mouse_y).abs
  521.    if check_pos > 10
  522.      $game_system.se_play($data_system.cursor_se)
  523.      place = 10 ** (@digits_max - 1 - @index)
  524.      n = @number / place % 10
  525.      @number -= n * place
  526.      n = (n + 1) % 10 if mouse_y < @last_mouse_y
  527.      n = (n + 9) % 10 if mouse_y > @last_mouse_y
  528.      @number += n * place
  529.      refresh
  530.      @last_mouse_y = mouse_y
  531.    end
  532. end
  533. end
  534. class Scene_File
  535. if @self_alias == nil
  536.    alias self_update update
  537.    @self_alias = true
  538. end
  539. def update
  540.    mouse_x, mouse_y = Mouse.get_mouse_pos
  541.    Mouse.click_lock
  542.    idx = 0
  543.    for i in @savefile_windows
  544.      top_x = i.x + 16
  545.      top_y = i.y + 16
  546.      bottom_x = top_x + i.width
  547.      bottom_y = top_y + i.height
  548.      if (mouse_x > top_x) and (mouse_y > top_y) and
  549.         (mouse_x < bottom_x) and (mouse_y < bottom_y)
  550.        i.selected = true
  551.        if @file_index != idx
  552.          @file_index = idx
  553.          $game_system.se_play($data_system.cursor_se)
  554.        end            
  555.        Mouse.click_unlock
  556.      else
  557.        i.selected = false
  558.      end
  559.      idx += 1
  560.    end
  561.    self_update
  562. end
  563. end
  564. class Arrow_Enemy
  565. if @self_alias == nil
  566.    alias self_update update
  567.    @self_alias = true
  568. end
  569. def update
  570.    mouse_x, mouse_y = Mouse.get_mouse_pos
  571.    idx = 0
  572.    for i in $game_troop.enemies do
  573.      if i.exist?
  574.        top_x = i.screen_x - self.ox
  575.        top_y = i.screen_y - self.oy
  576.        bottom_x = top_x + self.src_rect.width
  577.        bottom_y = top_y + self.src_rect.height
  578.        if (mouse_x > top_x - $敌人选框扩大) and (mouse_y > top_y - $敌人选框扩大) and
  579.           (mouse_x < bottom_x + $敌人选框扩大) and (mouse_y < bottom_y + $敌人选框扩大)
  580.          if @index != idx
  581.            $game_system.se_play($data_system.cursor_se)
  582.            @index = idx
  583.          end
  584.        end
  585.      end
  586.      idx += 1
  587.    end
  588.    self_update
  589. end
  590. end
  591. class Arrow_Actor
  592. if @self_alias == nil
  593.    alias self_update update
  594.    @self_alias = true
  595. end
  596. def update
  597.    mouse_x, mouse_y = Mouse.get_mouse_pos
  598.    idx = 0
  599.    for i in $game_party.actors do
  600.      if i.exist?
  601.        top_x = i.screen_x - self.ox
  602.        top_y = i.screen_y - self.oy
  603.        bottom_x = top_x + self.src_rect.width
  604.        bottom_y = top_y + self.src_rect.height
  605.        if (mouse_x > top_x - $角色选框扩大) and (mouse_y > top_y - $角色选框扩大) and
  606.           (mouse_x < bottom_x + $角色选框扩大) and (mouse_y < bottom_y + $角色选框扩大)
  607.          if @index != idx
  608.            $game_system.se_play($data_system.cursor_se)
  609.            @index = idx
  610.          end
  611.        end
  612.      end
  613.      idx += 1
  614.    end
  615.    self_update
  616. end
  617. end
  618. #==============================================================================
  619. # ■ Game_Player
  620. #------------------------------------------------------------------------------
  621. #  处理主角的类。事件启动的判定、以及地图的滚动等功能。
  622. # 本类的实例请参考 $game_player。
  623. #   鼠标控制角色的主程序
  624. #==============================================================================
  625. class Game_Player
  626. if @self_alias == nil
  627.    alias self_update update
  628.    @self_alias = true
  629. end
  630. #--------------------------------------------------------------------------
  631. # ● 得到鼠标的状态
  632. #--------------------------------------------------------------------------
  633. def get_mouse_sta
  634.    return @mouse_sta
  635. end
  636. #--------------------------------------------------------------------------
  637. # ● 完整鼠标系统
  638. #--------------------------------------------------------------------------
  639. def update
  640.    mouse_x, mouse_y = Mouse.get_mouse_pos
  641.    @mtp_x = mouse_x
  642.    @mtp_y = mouse_y
  643.    unless $game_system.map_interpreter.running? and @mouse_sta == 2 #鼠标状态不为跟随状态
  644.      #得到鼠标图标方向
  645.      $mouse_icon_id = $game_map.check_event_custom(mouse_x,mouse_y)  if not [11, 12, 13, 14, 16, 17, 18, 19].include?($mouse_icon_id)
  646.    else
  647.      #令鼠标图标为正常
  648.      $mouse_icon_id = 0 if @mouse_sta != 2
  649.    end
  650.    
  651.    #单击鼠标时进行判断寻路或跟随
  652.    if Mouse.trigger?(Mouse::LEFT) #当点击鼠标时
  653.      unless $game_system.map_interpreter.running? or
  654.             @move_route_forcing or $game_temp.message_window_showing #各种无效情况的排除
  655.        #初始化
  656.        @mouse_sta = 1
  657.        p_direction = 5
  658.        #检查鼠标处能否开启事件
  659.        event_start,p_direction = $game_map.check_event_custom_start(mouse_x, mouse_y)
  660.        #若在移动中再次点击鼠标左键(即双击左键),则改鼠标状态为跟随状态
  661.        @mouse_sta = 2 if @paths_id != nil and @paths_id != @paths.size
  662.        if @mouse_sta != 2
  663.          #鼠标状态不为跟随状态则取数据并初始化路径
  664.          trg_x = (mouse_x + $game_map.display_x / 4) / 32
  665.          trg_y = (mouse_y + $game_map.display_y / 4) / 32
  666.          @paths = []
  667.          @paths_id = 0
  668.          if event_start == 0 #若不能开启事件
  669.            if trg_x != $game_player.x or trg_y != $game_player.y #若目标不为自身则开始寻路
  670.              Mouse.set_ani(mouse_x + $game_map.display_x / 4, mouse_y + $game_map.display_y / 4)
  671.              find_path = Find_Path.new
  672.              @paths = find_path.find_player_short_path(trg_x, trg_y, @mtp_x, @mtp_y)
  673.            end
  674.          else #若能开启事件则改变角色朝向
  675.            @direction = p_direction
  676.          end
  677.        end
  678.      end
  679.    end

  680.    #开始移动
  681.    if @mouse_sta != nil and @mouse_sta == 1 #若鼠标状态为寻路状态
  682.      unless moving? or $game_system.map_interpreter.running? or
  683.             @move_route_forcing or $game_temp.message_window_showing #排除无效情况
  684.        if @paths_id != nil and @paths != nil and @paths_id <= @paths.size #若没有完成路径
  685.          case @paths[@paths_id] #判断路径
  686.          when 6
  687.            @last_move_x = true
  688.            move_right
  689.            @paths_id += 1
  690.            @direction = 6
  691.          when 4
  692.            @last_move_x = true
  693.            move_left
  694.            @paths_id += 1
  695.            @direction = 4
  696.          when 2
  697.            @last_move_x = false
  698.            move_down
  699.            @direction = 2
  700.            @paths_id += 1
  701.          when 8
  702.            @last_move_x = false
  703.            move_up
  704.            @direction = 8
  705.            @paths_id += 1
  706.          #斜四方向
  707.          when 1
  708.            @last_move_x = false
  709.            move_lower_left
  710.            @direction = 1
  711.            @paths_id += 1
  712.          when 3
  713.            @last_move_x = false
  714.            move_lower_right
  715.            @direction = 3
  716.            @paths_id += 1
  717.          when 7
  718.            @last_move_x = false
  719.            move_upper_left
  720.            @direction = 7
  721.            @paths_id += 1
  722.          when 9
  723.            @last_move_x = false
  724.            move_upper_right
  725.            @direction = 9
  726.            @paths_id += 1
  727.          end
  728.        end
  729.      end
  730.    elsif @paths != nil and @mouse_sta == 2 #当鼠标状态为跟随,且在移动中
  731.      if Mouse.press?(Mouse::LEFT) #持续按住鼠标
  732.        unless moving? or $game_system.map_interpreter.running? or
  733.               @move_route_forcing or $game_temp.message_window_showing #排除无效情况
  734.          #跟随方向判断并跟随
  735.          rate =  $game_map.show_rate(self)
  736.          width = (RPG::Cache.character(self.character_name,self.character_hue).width / $c3_每一步的帧数) * rate
  737.          height = (RPG::Cache.character(self.character_name,self.character_hue).height / 8) * rate
  738.          self_ox = (self.screen_x - width / 2 + self.screen_x + width / 2) / 2
  739.          self_oy = (self.screen_y - height + self.screen_y) / 2
  740.          if (@mtp_x - self_ox)*(@mtp_x - self_ox) + (@mtp_y - self_oy)*(@mtp_y - self_oy) >= 961
  741.            if @mtp_x > self_ox
  742.              if self_oy - @mtp_y < 0.4 * (@mtp_x - self_ox) and
  743.                 @mtp_y - self_oy < 0.4 * (@mtp_x - self_ox)
  744.                move_right
  745.                $mouse_icon_id = 16
  746.                @direction = 6
  747.              end
  748.              if @mtp_y - self_oy > - 0.4 * ( self_ox - @mtp_x ) and
  749.                 @mtp_y - self_oy < - 2.4 * ( self_ox - @mtp_x )
  750.                move_lower_right
  751.                $mouse_icon_id = 13
  752.                @direction = 3
  753.              end
  754.              if @mtp_y - self_oy < 0.4 * ( self_ox - @mtp_x ) and
  755.                 @mtp_y - self_oy > 2.4 * ( self_ox - @mtp_x )
  756.                move_upper_right
  757.                $mouse_icon_id = 19
  758.                @direction = 9
  759.              end
  760.              if @mtp_y - self_oy > 2.4 * ( @mtp_x - self_ox )
  761.                move_down
  762.                $mouse_icon_id = 12
  763.                @direction = 2
  764.              end
  765.              if @mtp_y - self_oy < - 2.4 * ( @mtp_x - self_ox )
  766.                move_up
  767.                $mouse_icon_id = 18
  768.                @direction = 8
  769.              end
  770.            end
  771.            if @mtp_x < self_ox
  772.              if @mtp_y - self_oy > - 0.4 * ( self_ox - @mtp_x ) and
  773.                 @mtp_y - self_oy < 0.4 * ( self_ox - @mtp_x )
  774.                move_left
  775.                $mouse_icon_id = 14
  776.                @direction = 4
  777.              end
  778.              if @mtp_y - self_oy > 0.4 * ( self_ox - @mtp_x ) and
  779.                 @mtp_y - self_oy < 2.4 * ( self_ox - @mtp_x )
  780.                move_lower_left
  781.                $mouse_icon_id = 11
  782.                @direction = 1
  783.              end
  784.              if @mtp_y - self_oy < - 0.4 * ( self_ox - @mtp_x ) and
  785.                 @mtp_y - self_oy > - 2.4 * ( self_ox - @mtp_x )
  786.                move_upper_left
  787.                $mouse_icon_id = 17
  788.                @direction = 7
  789.              end
  790.              if @mtp_y - self_oy > 2.4 * ( self_ox - @mtp_x )
  791.                move_down
  792.                $mouse_icon_id = 12
  793.                @direction = 2
  794.              end
  795.              if @mtp_y - self_oy < - 2.4 * ( self_ox - @mtp_x )
  796.                move_up
  797.                $mouse_icon_id = 18
  798.                @direction = 8
  799.              end
  800.            end
  801.          end
  802.            #...................................................................
  803.            if @mtp_x > self_ox
  804.              if @mtp_y - self_oy > - 0.4 * ( @mtp_x - self_ox ) and
  805.                 @mtp_y - self_oy < 0.4 * ( @mtp_x - self_ox )
  806.                $mouse_icon_id = 16
  807.                @direction = 6
  808.              end
  809.              if @mtp_y - self_oy > 0.4 * ( @mtp_x - self_ox ) and
  810.                @mtp_y - self_oy < 2.4 * ( @mtp_x - self_ox )
  811.                $mouse_icon_id = 13
  812.                @direction = 3
  813.              end
  814.              if @mtp_y - self_oy < - 0.4 * ( @mtp_x - self_ox ) and
  815.                @mtp_y - self_oy > - 2.4 * ( @mtp_x - self_ox )
  816.                $mouse_icon_id = 19
  817.                @direction = 9
  818.              end
  819.              if @mtp_y - self_oy > 2.4 * ( @mtp_x - self_ox )
  820.                $mouse_icon_id = 12
  821.                @direction = 2
  822.              end
  823.              if @mtp_y - self_oy < - 2.4 * ( @mtp_x - self_ox )
  824.                $mouse_icon_id = 18
  825.                @direction = 8
  826.              end
  827.            end
  828.            if @mtp_x < self_ox
  829.              if @mtp_y - self_oy > - 0.4 * ( self_ox - @mtp_x ) and
  830.                 @mtp_y - self_oy < 0.4 * ( self_ox - @mtp_x )
  831.                $mouse_icon_id = 14
  832.                @direction = 4
  833.              end
  834.              if @mtp_y - self_oy > 0.4 * ( self_ox - @mtp_x ) and
  835.                 @mtp_y - self_oy < 2.4 * ( self_ox - @mtp_x )
  836.                $mouse_icon_id = 11
  837.                @direction = 1
  838.              end
  839.              if @mtp_y - self_oy < - 0.4 * ( self_ox - @mtp_x ) and
  840.                 @mtp_y - self_oy > - 2.4 * ( self_ox - @mtp_x )
  841.                $mouse_icon_id = 17
  842.                @direction = 7
  843.              end
  844.              if @mtp_y - self_oy > 2.4 * ( self_ox - @mtp_x )
  845.                $mouse_icon_id = 12
  846.                @direction = 2
  847.              end
  848.              if @mtp_y - self_oy < - 2.4 * ( self_ox - @mtp_x )
  849.                $mouse_icon_id = 18
  850.                @direction = 8
  851.              end
  852.            end
  853.            #...................................................................
  854.        end
  855.      else #没状态的情况
  856.        $mouse_icon_id = 0
  857.        @mouse_sta = 0
  858.        @paths_id = @paths.size #终止寻路移动
  859.      end
  860.    end
  861.    #..........................................................................
  862.    #当 自动移动 标记为真 以及 不在移动时
  863.    if @go_path and !moving?
  864.      #依据 自动移动 处理位置 判断下一步该往哪儿走
  865.      case @path[@path_id]
  866.      when 1
  867.        move_lower_left
  868.      when 3
  869.        move_lower_right
  870.      when 7
  871.        move_upper_left
  872.      when 9
  873.        move_upper_right
  874.      when 2
  875.        move_down
  876.      when 4
  877.        move_left
  878.      when 6
  879.        move_right
  880.      when 8
  881.        move_up
  882.      end
  883.      #自动移动 处理位置 递增
  884.      @path_id += 1
  885.      #假如 自动移动 处理位置 到达 路线数组的末尾
  886.      if @path_id == @path.size
  887.        #使得 自动移动 标记重置
  888.        @go_path = false
  889.      end
  890.    end
  891.    #..........................................................................
  892.    self_update
  893. end
  894. end
  895. Mouse.init
  896. END { Mouse.exit }
复制代码

点评

问题如果已解决的话,请认可~  发表于 2011-9-4 17:48
表示没找到什么Bug  发表于 2011-8-19 20:14
好吧原来是求整合  发表于 2011-8-19 16:14
感觉LZ发出来的脚本毫无用处  发表于 2011-8-19 16:06

Lv3.寻梦者

小柯的徒弟

梦石
0
星屑
1530
在线时间
1157 小时
注册时间
2008-5-24
帖子
3085

贵宾

3
发表于 2011-8-27 10:09:28 | 只看该作者
T.T原来真的有人用我写的脚本,好感动……

口算题.rar (3.52 MB, 下载次数: 301)

改好了~可以用事件的脚本功能进行切换~

关闭是:
  1. $xiaolv20 = false
  2. true
复制代码
打开是:
  1. $xiaolv20 = true
  2. true
复制代码

点评

一直没时间上,所以刚看到,谢谢前辈啊 \(^o^)/~  发表于 2011-9-4 23:50
捏爆小黄鸡~  发表于 2011-8-27 10:23
= =||  发表于 2011-8-27 10:22
喂喂这是什么表情呀~  发表于 2011-8-27 10:22
”T.T原来真的有人用我写的脚本,好感动……“ = = !!!  发表于 2011-8-27 10:18
回复

使用道具 举报

Lv1.梦旅人

虱子

梦石
0
星屑
121
在线时间
1782 小时
注册时间
2010-6-19
帖子
3597
2
发表于 2011-8-19 16:23:59 | 只看该作者
又诡异的东西.rar (194.77 KB, 下载次数: 2)
没有鼠标图片表示无法测试

点评

鼠标脚本有错误哦,主要是想在不改变原鼠标脚本功能的基础上,增加“可以随意取消鼠标”的功能  发表于 2011-8-19 23:56
工程已上传,麻烦帮忙看看~~~  发表于 2011-8-19 18:43

http://rpg.blue/thread-175056-1-2.html
PVZ型塔防物一个
http://rpg.blue/thread-155199-1-2.html
RMXP技术讨论区手动认可帖,得到答案请认可
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-27 04:23

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表