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

Project1

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

用鼠标控制时,满物品窗口不能滚动...

 关闭 [复制链接]

Lv2.观梦者

梦石
0
星屑
344
在线时间
185 小时
注册时间
2007-9-2
帖子
168
跳转到指定楼层
1
发表于 2009-6-6 03:28:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
用鼠标控制时,当物品满的超过当前窗口时,鼠标不能很好的滚动,能不能加个滑动条或者上翻、下翻按钮...
鼠标整合脚本:
  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[192].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.cursor_rect.empty
  422.     self_update
  423.     if self.active and @item_max > 0
  424.       index_var = @index
  425.       tp_index = @index
  426.       mouse_x, mouse_y = Mouse.get_mouse_pos
  427.       mouse_not_in_rect = true
  428.       for i in 0...@item_max
  429.         @index = i
  430.         update_cursor_rect
  431.         top_x = self.cursor_rect.x + self.x + 16
  432.         top_y = self.cursor_rect.y + self.y + 16
  433.         bottom_x = top_x + self.cursor_rect.width
  434.         bottom_y = top_y + self.cursor_rect.height
  435.         if (mouse_x > top_x) and (mouse_y > top_y) and
  436.            (mouse_x < bottom_x) and (mouse_y < bottom_y)
  437.           mouse_not_in_rect = false
  438.           if tp_index != @index
  439.             tp_index = @index
  440.             $game_system.se_play($data_system.cursor_se)
  441.           end
  442.           break
  443.         end
  444.       end
  445.       if mouse_not_in_rect
  446.         #  row = @index / @column_max
  447.           # 当前行被显示开头行前面的情况下
  448.           if self.top_row < row_max-page_row_max and Mouse.press?(Mouse::LEFT) and mouse_y>self.y+self.height/2
  449.             self.top_row +=1
  450.           end
  451.           # 当前行被显示末尾行之后的情况下
  452.           if self.top_row > 0 and Mouse.press?(Mouse::LEFT) and mouse_y<=self.y+self.height/2#self.top_row + (self.page_row_max - 1)
  453.             # 从当前行向末尾滚动
  454.             self.top_row -=1
  455.           end
  456.         @index = index_var
  457.         if self.is_a?(Window_Target)
  458.           @index=-3
  459.         end
  460.         update_cursor_rect
  461.         Mouse.click_lock
  462.       else
  463.         Mouse.click_unlock               
  464.       end
  465.     end
  466.   end
  467.   def update_cursor_rect
  468.     # 光标位置不满 0 的情况下
  469.     if @index < 0
  470.       self.cursor_rect.empty
  471.       return
  472.     end
  473.     # 获取当前的行
  474.     row = @index / @column_max
  475.     # 当前行被显示开头行前面的情况下
  476.     if row < self.top_row
  477.       # 从当前行向开头行滚动
  478.       self.cursor_rect.empty
  479.       return
  480.     end
  481.     # 当前行被显示末尾行之后的情况下
  482.     if row > self.top_row + (self.page_row_max - 1)
  483.       # 从当前行向末尾滚动
  484.       self.cursor_rect.empty
  485.       return
  486.     end
  487.     # 计算光标的宽
  488.     cursor_width = self.width / @column_max - 32
  489.     # 计算光标坐标
  490.     x = @index % @column_max * (cursor_width + 32)
  491.     y = @index / @column_max * 32 - self.oy
  492.     # 更新光标矩形
  493.     self.cursor_rect.set(x, y, cursor_width, 32)
  494.   end
  495. end



  496. class Window_NameInput
  497. if @self_alias == nil
  498.    alias self_update update
  499.    @self_alias = true
  500. end
  501. def update
  502.    self_update
  503.    if self.active
  504.      index_var = @index
  505.      mouse_x, mouse_y = Mouse.get_mouse_pos
  506.      mouse_not_in_rect = true
  507.      for i in (0...CHARACTER_TABLE.size).to_a.push(180)
  508.        @index = i
  509.        update_cursor_rect
  510.        top_x = self.cursor_rect.x + self.x + 16
  511.        top_y = self.cursor_rect.y + self.y + 16
  512.        bottom_x = top_x + self.cursor_rect.width
  513.        bottom_y = top_y + self.cursor_rect.height
  514.        if (mouse_x > top_x) and (mouse_y > top_y) and
  515.           (mouse_x < bottom_x) and (mouse_y < bottom_y)
  516.          mouse_not_in_rect = false
  517.          break
  518.        end
  519.      end
  520.      if mouse_not_in_rect
  521.        @index = index_var
  522.        update_cursor_rect
  523.        Mouse.click_lock
  524.      else
  525.        Mouse.click_unlock
  526.      end
  527.    end
  528. end
  529. end
  530. class Window_InputNumber
  531. if @self_alias == nil
  532.    alias self_update update
  533.    @self_alias = true
  534. end
  535. def update
  536.    self_update
  537.    mouse_x, mouse_y = Mouse.get_mouse_pos
  538.    if self.active and @digits_max > 0
  539.      index_var = @index
  540.      mouse_not_in_rect = true
  541.      for i in 0...@digits_max
  542.        @index = i
  543.        update_cursor_rect
  544.        top_x = self.cursor_rect.x + self.x + 16
  545.        bottom_x = top_x + self.cursor_rect.width
  546.        if (mouse_x > top_x) and (mouse_x < bottom_x)
  547.          mouse_not_in_rect = false
  548.          break
  549.        end
  550.      end
  551.      if mouse_not_in_rect
  552.        @index = index_var
  553.        update_cursor_rect
  554.        Mouse.click_lock
  555.      else
  556.        Mouse.click_unlock
  557.      end
  558.    end
  559.    if @last_mouse_y == nil
  560.      @last_mouse_y = mouse_y
  561.    end
  562.    check_pos = (@last_mouse_y - mouse_y).abs
  563.    if check_pos > 10
  564.      $game_system.se_play($data_system.cursor_se)
  565.      place = 10 ** (@digits_max - 1 - @index)
  566.      n = @number / place % 10
  567.      @number -= n * place
  568.      n = (n + 1) % 10 if mouse_y < @last_mouse_y
  569.      n = (n + 9) % 10 if mouse_y > @last_mouse_y
  570.      @number += n * place
  571.      refresh
  572.      @last_mouse_y = mouse_y
  573.    end
  574. end
  575. end
  576. class Scene_File
  577. if @self_alias == nil
  578.    alias self_update update
  579.    @self_alias = true
  580. end
  581. def update
  582.    mouse_x, mouse_y = Mouse.get_mouse_pos
  583.    Mouse.click_lock
  584.    idx = 0
  585.    for i in @savefile_windows
  586.      top_x = i.x + 16
  587.      top_y = i.y + 16
  588.      bottom_x = top_x + i.width
  589.      bottom_y = top_y + i.height
  590.      if (mouse_x > top_x) and (mouse_y > top_y) and
  591.         (mouse_x < bottom_x) and (mouse_y < bottom_y)
  592.        i.selected = true
  593.        if @file_index != idx
  594.          @file_index = idx
  595.          $game_system.se_play($data_system.cursor_se)
  596.        end            
  597.        Mouse.click_unlock
  598.      else
  599.        i.selected = false
  600.      end
  601.      idx += 1
  602.    end
  603.    self_update
  604. end
  605. end
  606. class Arrow_Enemy
  607. if @self_alias == nil
  608.    alias self_update update
  609.    @self_alias = true
  610. end
  611. def update
  612.    mouse_x, mouse_y = Mouse.get_mouse_pos
  613.    idx = 0
  614.    for i in $game_troop.enemies do
  615.      if i.exist?
  616.        top_x = i.screen_x - self.ox
  617.        top_y = i.screen_y - self.oy
  618.        bottom_x = top_x + self.src_rect.width
  619.        bottom_y = top_y + self.src_rect.height
  620.        if (mouse_x > top_x - $敌人选框扩大) and (mouse_y > top_y - $敌人选框扩大) and
  621.           (mouse_x < bottom_x + $敌人选框扩大) and (mouse_y < bottom_y + $敌人选框扩大)
  622.          if @index != idx
  623.            $game_system.se_play($data_system.cursor_se)
  624.            @index = idx
  625.          end
  626.        end
  627.      end
  628.      idx += 1
  629.    end
  630.    self_update
  631. end
  632. end
  633. class Arrow_Actor
  634. if @self_alias == nil
  635.    alias self_update update
  636.    @self_alias = true
  637. end
  638. def update
  639.    mouse_x, mouse_y = Mouse.get_mouse_pos
  640.    idx = 0
  641.    for i in $game_party.actors do
  642.      if i.exist?
  643.        top_x = i.screen_x - self.ox
  644.        top_y = i.screen_y - self.oy
  645.        bottom_x = top_x + self.src_rect.width
  646.        bottom_y = top_y + self.src_rect.height
  647.        if (mouse_x > top_x - $角色选框扩大) and (mouse_y > top_y - $角色选框扩大) and
  648.           (mouse_x < bottom_x + $角色选框扩大) and (mouse_y < bottom_y + $角色选框扩大)
  649.          if @index != idx
  650.            $game_system.se_play($data_system.cursor_se)
  651.            @index = idx
  652.          end
  653.        end
  654.      end
  655.      idx += 1
  656.    end
  657.    self_update
  658. end
  659. end
  660. #==============================================================================
  661. # ■ Game_Player
  662. #------------------------------------------------------------------------------
  663. #  处理主角的类。事件启动的判定、以及地图的滚动等功能。
  664. # 本类的实例请参考 $game_player。
  665. #   鼠标控制角色的主程序
  666. #==============================================================================
  667. class Game_Player
  668. if @self_alias == nil
  669.    alias self_update update
  670.    @self_alias = true
  671. end
  672. #--------------------------------------------------------------------------
  673. # ● 得到鼠标的状态
  674. #--------------------------------------------------------------------------
  675. def get_mouse_sta
  676.    return @mouse_sta
  677. end
  678. #--------------------------------------------------------------------------
  679. # ● 完整鼠标系统
  680. #--------------------------------------------------------------------------
  681. def update
  682.    mouse_x, mouse_y = Mouse.get_mouse_pos
  683.    @mtp_x = mouse_x
  684.    @mtp_y = mouse_y
  685.    unless $game_system.map_interpreter.running? and @mouse_sta == 2 #鼠标状态不为跟随状态
  686.      #得到鼠标图标方向
  687.      $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)
  688.    else
  689.      #令鼠标图标为正常
  690.      $mouse_icon_id = 0 if @mouse_sta != 2
  691.    end
  692.    
  693.    #单击鼠标时进行判断寻路或跟随
  694.    if Mouse.trigger?(Mouse::LEFT) #当点击鼠标时
  695.      unless $game_system.map_interpreter.running? or
  696.             @move_route_forcing or $game_temp.message_window_showing #各种无效情况的排除
  697.        #初始化
  698.        @mouse_sta = 1
  699.        p_direction = 5
  700.        #检查鼠标处能否开启事件
  701.        event_start,p_direction = $game_map.check_event_custom_start(mouse_x, mouse_y)
  702.        #若在移动中再次点击鼠标左键(即双击左键),则改鼠标状态为跟随状态
  703.        @mouse_sta = 2 if @paths_id != nil and @paths_id != @paths.size
  704.        if @mouse_sta != 2
  705.          #鼠标状态不为跟随状态则取数据并初始化路径
  706.          trg_x = (mouse_x + $game_map.display_x / 4) / 32
  707.          trg_y = (mouse_y + $game_map.display_y / 4) / 32
  708.          @paths = []
  709.          @paths_id = 0
  710.          if event_start == 0 #若不能开启事件
  711.            if trg_x != $game_player.x or trg_y != $game_player.y #若目标不为自身则开始寻路
  712.              Mouse.set_ani(mouse_x + $game_map.display_x / 4, mouse_y + $game_map.display_y / 4)
  713.              find_path = Find_Path.new
  714.              @paths = find_path.find_player_short_path(trg_x, trg_y, @mtp_x, @mtp_y)
  715.            end
  716.          else #若能开启事件则改变角色朝向
  717.            @direction = p_direction
  718.          end
  719.        end
  720.      end
  721.    end

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

版务信息:本贴由楼主自主结贴~
新手作品:《幻想》———缓慢制作中———
   
合击技能!哇哈哈~~~                                                                     金山寺求宝~~~

Lv1.梦旅人

梦石
0
星屑
72
在线时间
21 小时
注册时间
2009-3-15
帖子
262
2
发表于 2009-6-6 03:56:27 | 只看该作者
一般加入鼠标系统也可以用键盘控制,除非把键盘脚本删掉!所以你可以用键盘向下翻页!
一定要给我分!
看到天上的星星了吗?
想一想,哪一颗属于你。
哪一颗属于我。
找到自己的星星,飞吧……
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6875
在线时间
1666 小时
注册时间
2008-10-29
帖子
6710

贵宾

3
发表于 2009-6-6 04:49:18 | 只看该作者
http://rpg.blue/web/htm/news1021.htm

先看清楚作者说的话以后再决定要不要用

系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~











你知道得太多了

回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
344
在线时间
185 小时
注册时间
2007-9-2
帖子
168
4
 楼主| 发表于 2009-6-6 06:30:09 | 只看该作者
http://rpg.blue/web/htm/news1021.htm

先看清楚作者说的话以后再决定要不要用


试了试还是不很理想,还得用键盘上下翻页
新手作品:《幻想》———缓慢制作中———
   
合击技能!哇哈哈~~~                                                                     金山寺求宝~~~
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6875
在线时间
1666 小时
注册时间
2008-10-29
帖子
6710

贵宾

5
发表于 2009-6-6 08:16:25 | 只看该作者
那你自己就只有在旁边做一个向上翻页和一个向下翻页的按钮了











你知道得太多了

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-13 15:48

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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