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

Project1

 找回密码
 注册会员
搜索
查看: 4877|回复: 23

[原创发布] SEP 全鼠标脚本 v0.93 update

[复制链接]

Lv5.捕梦者 (版主)

遠航の猫咪

梦石
3
星屑
22385
在线时间
2335 小时
注册时间
2005-10-15
帖子
1160

开拓者

发表于 2018-1-12 23:51:39 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 SailCat 于 2018-1-21 00:12 编辑

以为小500行能搞定了,尼玛又整了姐一千多行……Window_NameInput类神马,能不能不要辣么坑……

虽然所有的scene和window类全部犁过了,但还是真怕哪些犄角旮旯里有漏掉的。

0.93 update
1. 增加对L/R/X/Y/Z按键的鼠标处理(其实就是按Ctrl和Alt修饰)
2. 鼠标增加开关设置,可以在设置中指定开或者关,也可以设置为一个数,表示绑定到这个编号的开关
3. 支持交换左右键

注意插入的位置,默认系统插哪都行,SEP核心系统如果用了窗口增强要插在所有增强的后面,毕竟鼠标最重要的就是操作窗口

RUBY 代码复制
  1. #==============================================================================
  2. # ■ SEP 全鼠标处理核心 v0.93 by SailCat
  3. #------------------------------------------------------------------------------
  4. #   方法:本脚本插入Main之前使用
  5. #   依赖:无
  6. #   版本:v0.93 (Build 180121)
  7. #   效果:
  8. #     1. 全鼠标响应(不含滚轮)
  9. #     2. 注入Input模块的update处理和trigger处理
  10. #     3. 默认设置中,单击左键等于按C,单击右键等于按B,单击中键等于按A
  11. #        按住CTRL键单击左/右键等于按R或L,按住ALT键单击左/右/中键等于按Z/Y/X
  12. #     4. 注入了对所有窗口(默认引擎中)以及战斗目标箭头的鼠标操作处理
  13. #     5. 地图上可以按住鼠标来移动
  14. #     6. 鼠标操作可以通过配置来开关
  15. #   配置:重复延迟和重复间隔速率,双击设定和行走设定,光标图片等
  16. #   冲突:其他类似脚本
  17. #   说明:
  18. #     1. 调用全鼠标方法为Mouse.press?(按键名称),表示对应的键处于按下状态。
  19. #        键名为以下5个之一:L(左)、R(右)、M(中)、X1(自定1)、X2(自定2)
  20. #     2. 上述press?也可替换为click?, repeat?, release?或trigger?,分别表示:
  21. #        单击(按下并松开一次),按住不放,松开瞬间,按下瞬间
  22. #     3. 双击并不是自动判定的,需要通过begin_dblclick和check_dblclick手动开启,
  23. #        然后用Mouse.dblclick?(按键名称)判定,这是为了避免误操作问题。
  24. #     4. 本脚本并不依赖窗口增强脚本,但如果你使用了窗口增强脚本,
  25. #        请将本脚本插入到窗口增强类脚本的后面。
  26. #==============================================================================
  27. #==============================================================================
  28. # ■ SailCat's 插件公用
  29. #==============================================================================
  30. module SailCat
  31.   $sailcat_import ||= {}
  32.   #--------------------------------------------------------------------------
  33.   # ● 脚本配置区
  34.   #--------------------------------------------------------------------------
  35.   module Mouse_Config
  36.     MOUSE_ENABLED = true          # 是否启用鼠标(true是,false否,数字绑定开关)
  37.     REPEAT_DELAY = 8              # 首次重复前的延迟值(帧)
  38.     REPEAT_SPEED = 4              # 每次重复点击的间隔(帧),越大越慢
  39.     DBLCLICK_TIME = 20            # 双击判定最长有效间隔(帧)
  40.     DBLCLICK_MOVE = 3             # 双击判定最多有效移动(像素)
  41.     C_DBLCLICK = false            # 按下C键是否要求双击
  42.     MOVE_DIR8 = false             # 是否为八方向行走
  43.     CURSOR_PIC = ""               # 鼠标指针图片,为空是默认的图片(白色箭头)
  44.     LEFT_HANDED = false           # 是否为左手鼠标(交换左右键)
  45.     #--------------------------------------------------------------------------
  46.     # ● 配置检查,请勿更改
  47.     #--------------------------------------------------------------------------
  48.     unless REPEAT_SPEED > 0
  49.       raise "重复点击的间隔不能低于1帧"
  50.     end
  51.     unless DBLCLICK_TIME > 0
  52.       raise "双击判定的间隔不能低于1帧"
  53.     end
  54.     unless DBLCLICK_MOVE >= 0
  55.       raise "双击判定的移动不能低于0像素"
  56.     end
  57.   end
  58.   #--------------------------------------------------------------------------
  59.   # ● 植入
  60.   #--------------------------------------------------------------------------
  61.   $sailcat_import[:Mouse] = 0.93
  62. end
  63.  
  64. #==============================================================================
  65. # ■ 鼠标全局指针
  66. #==============================================================================
  67. $mouse_pointer = Sprite.new
  68. if SailCat::Mouse_Config::CURSOR_PIC != ""
  69.   # 加载图片
  70.   $mouse_pointer.bitmap = RPG::Cache.picture(SailCat::Mouse_Config.CURSOR_PIC)
  71. else
  72.   # 绘制默认图片
  73.   $mouse_pointer.bitmap = Bitmap.new(13, 18)
  74.   black = Color.new(0, 0, 0, 255)
  75.   white = Color.new(255, 255, 255, 255)
  76.   for y in 0..17
  77.     case y
  78.     when 0..11
  79.       $mouse_pointer.bitmap.set_pixel(0, y, black)
  80.       $mouse_pointer.bitmap.fill_rect(1, y, y - 1, 1, white) if y > 1
  81.       $mouse_pointer.bitmap.set_pixel(y, y, black)
  82.     when 12
  83.       $mouse_pointer.bitmap.set_pixel(0, y, black)
  84.       $mouse_pointer.bitmap.fill_rect(1, y, 4, 1, white)
  85.       $mouse_pointer.bitmap.fill_rect(5, y, 8, 1, black)
  86.     when 13..17
  87.       $mouse_pointer.bitmap.set_pixel(0, y, black)
  88.       $mouse_pointer.bitmap.fill_rect(1, y, 16 - y, 1, white) if y < 16
  89.       $mouse_pointer.bitmap.set_pixel(17 - y, y, black)
  90.     end
  91.   end
  92. end
  93. # 设为可见,半透明,总在最上
  94. $mouse_pointer.visible = true
  95. $mouse_pointer.opacity = 160
  96. $mouse_pointer.z = 2147483647
  97.  
  98. #==============================================================================
  99. # ■ 全鼠标处理核心
  100. #==============================================================================
  101. module Mouse
  102.   include SailCat::Mouse_Config
  103.   #--------------------------------------------------------------------------
  104.   # ● 常量
  105.   #--------------------------------------------------------------------------
  106.   NONE, M, X1, X2 = 0, 4, 5, 6
  107.   L = LEFT_HANDED ? 2 : 1
  108.   R = LEFT_HANDED ? 1 : 2
  109.   #--------------------------------------------------------------------------
  110.   # ● API
  111.   #--------------------------------------------------------------------------
  112.   GetCursorPos = Win32API.new("user32", "GetCursorPos", "p", "i")
  113.   ScreenToClient = Win32API.new("user32", "ScreenToClient", "ip", "i")
  114.   GetActiveWindow = Win32API.new("user32", "GetActiveWindow", "", "i")
  115.   GetAsyncKeyState = Win32API.new("user32", "GetAsyncKeyState", "i", "i")
  116.   #--------------------------------------------------------------------------
  117.   # ● 鼠标按键和光标数据
  118.   #--------------------------------------------------------------------------
  119.   Flags = {}
  120.   Data = {:x => 0, :y => 0, :key => NONE, :frame => 0, :dx => 0, :dy => 0}
  121.   #--------------------------------------------------------------------------
  122.   # ● 鼠标是否可用
  123.   #--------------------------------------------------------------------------
  124.   def self.enabled?
  125.     if MOUSE_ENABLED.is_a?(Fixnum)
  126.       $game_switches ? $game_switches[MOUSE_ENABLED] : true
  127.     else
  128.       MOUSE_ENABLED
  129.     end
  130.   end
  131.   #--------------------------------------------------------------------------
  132.   # ● 更新鼠标输入,该方法每帧调用1次
  133.   #--------------------------------------------------------------------------
  134.   def self.update
  135.     if enabled?
  136.       s = [0, 0].pack("l*")
  137.       GetCursorPos.call(s)
  138.       ScreenToClient.call(hwnd, s)
  139.       Data[:x], Data[:y] = s.unpack("l*")
  140.       $mouse_pointer.visible = true unless $mouse_pointer.visible
  141.       $mouse_pointer.x = Data[:x]
  142.       $mouse_pointer.y = Data[:y]
  143.       Data[:key] = NONE if Data[:frame] == -1
  144.       Data[:frame] += 1
  145.       Flags.each_key do |k|
  146.         if GetAsyncKeyState.call(k) & 32768 != 0
  147.           Flags[k] += 1
  148.         else
  149.           Flags[k] >= 0 ? Flags[k] = -1 : Flags.delete(k)
  150.         end
  151.       end
  152.     elsif $mouse_pointer.visible
  153.       $mouse_pointer.visible = false
  154.       Data[:key] = NONE
  155.     end
  156.   end
  157.   #--------------------------------------------------------------------------
  158.   # ● 判断对应的键是否被按下
  159.   #--------------------------------------------------------------------------
  160.   def self.press?(key)
  161.     return false unless enabled?
  162.     key = const_get(key) if key.is_a?(Symbol)
  163.     return true if Flags[key] && Flags[key] >= 0
  164.     GetAsyncKeyState.call(key) & 32768 != 0 ? (Flags[key] ||= 0; true) : false
  165.   end
  166.   #--------------------------------------------------------------------------
  167.   # ● 判断对应的键是否被松开
  168.   #--------------------------------------------------------------------------
  169.   def self.release?(key)
  170.     return false unless enabled?
  171.     key = const_get(key) if key.is_a?(Symbol)
  172.     Flags[key] == -1
  173.   end
  174.   #--------------------------------------------------------------------------
  175.   # ● 判断对应的键是否被触发
  176.   #--------------------------------------------------------------------------
  177.   def self.trigger?(key)
  178.     return false unless enabled?
  179.     key = const_get(key) if key.is_a?(Symbol)
  180.     Flags[key] ? Flags[key] == 0 : press?(key)
  181.   end
  182.   #--------------------------------------------------------------------------
  183.   # ● 判断对应的键是否被点击
  184.   #--------------------------------------------------------------------------
  185.   def self.click?(key)
  186.     return false unless enabled?
  187.     key = const_get(key) if key.is_a?(Symbol)
  188.     Flags[key] ? release?(key) : (press?(key); false)
  189.   end
  190.   #--------------------------------------------------------------------------
  191.   # ● 判断对应的键是否被按住
  192.   #--------------------------------------------------------------------------
  193.   def self.repeat?(key)
  194.     return false unless enabled?
  195.     key = const_get(key) if key.is_a?(Symbol)
  196.     Flags[key] ? (Flags[key] >= REPEAT_DELAY and (Flags[key] - REPEAT_DELAY) %
  197.       REPEAT_SPEED == 0) : press?(key)
  198.   end
  199.   #--------------------------------------------------------------------------
  200.   # ● 判断对应的键是否被双击
  201.   #--------------------------------------------------------------------------
  202.   def self.dblclick?(key)
  203.     return false unless enabled?
  204.     key = const_get(key) if key.is_a?(Symbol)
  205.     Data[:key] == key and Data[:frame] == -1
  206.   end
  207.   #--------------------------------------------------------------------------
  208.   # ● 获得窗口句柄
  209.   #--------------------------------------------------------------------------
  210.   def self.hwnd
  211.     @hwnd ||= GetActiveWindow.call
  212.   end
  213.   #--------------------------------------------------------------------------
  214.   # ● 获得鼠标指针坐标
  215.   #--------------------------------------------------------------------------
  216.   def self.x;       Data[:x];            end
  217.   def self.y;       Data[:y];            end
  218.   #--------------------------------------------------------------------------
  219.   # ● 双击开始处理
  220.   #--------------------------------------------------------------------------
  221.   def self.begin_dblclick(key)
  222.     key = const_get(key) if key.is_a?(Symbol)
  223.     Data[:key] = key
  224.     Data[:frame] = 0
  225.     Data[:dx] = x
  226.     Data[:dy] = y
  227.     # 按的是左键,不要求C键双击的情况下,判定成功
  228.     Data[:frame] = -1 unless C_DBLCLICK or key != L
  229.   end
  230.   #--------------------------------------------------------------------------
  231.   # ● 双击检查处理
  232.   #--------------------------------------------------------------------------
  233.   def self.check_dblclick(key)
  234.     key = const_get(key) if key.is_a?(Symbol)
  235.     # 如果按的键不是要检查的双击键,双击失败
  236.     return begin_dblclick(key) if Data[:key] != key
  237.     # 如果按的键间隔时间过长了,双击失败
  238.     return begin_dblclick(key) if Data[:frame] > DBLCLICK_TIME
  239.     # 如果两次按键中鼠标移动太多了,双击失败
  240.     return begin_dblclick(key) if (x - Data[:dx]).abs > DBLCLICK_MOVE
  241.     return begin_dblclick(key) if (y - Data[:dy]).abs > DBLCLICK_MOVE
  242.     # 设置双击标记
  243.     Data[:frame] = -1
  244.   end
  245. end
  246.  
  247. #==============================================================================
  248. # ■ Input 模块的注入
  249. #==============================================================================
  250. module Input
  251.   class << self
  252.     unless method_defined?(:sailcat_sepmouse_update)
  253.       alias sailcat_sepmouse_update update
  254.       alias sailcat_sepmouse_trigger? trigger?
  255.     end
  256.     def update
  257.       sailcat_sepmouse_update
  258.       Mouse.update
  259.     end
  260.     def trigger?(key)
  261.       case key
  262.       when A
  263.         sailcat_sepmouse_trigger?(key) or
  264.           (Mouse.click?(:M) and !press?(CTRL) and !press?(ALT))
  265.       when B
  266.         sailcat_sepmouse_trigger?(key) or
  267.           (Mouse.click?(:R) and !press?(CTRL) and !press?(ALT))
  268.       when C
  269.         sailcat_sepmouse_trigger?(key) or
  270.           (Mouse.dblclick?(:L) and !press?(CTRL) and !press?(ALT))
  271.       when L
  272.         sailcat_sepmouse_trigger?(key) or
  273.           (Mouse.click?(:R) and press?(CTRL) and !press?(ALT))
  274.       when R
  275.         sailcat_sepmouse_trigger?(key) or
  276.           (Mouse.click?(:L) and press?(CTRL) and !press?(ALT))
  277.       when X
  278.         sailcat_sepmouse_trigger?(key) or
  279.           (Mouse.click?(:M) and !press?(CTRL) and press?(ALT))
  280.       when Y
  281.         sailcat_sepmouse_trigger?(key) or
  282.           (Mouse.click?(:R) and !press?(CTRL) and press?(ALT))
  283.       when Z
  284.         sailcat_sepmouse_trigger?(key) or
  285.           (Mouse.click?(:L) and !press?(CTRL) and press?(ALT))
  286.       else
  287.         sailcat_sepmouse_trigger?(key)
  288.       end
  289.     end
  290.   end
  291. end
  292.  
  293. #==============================================================================
  294. # ■ Game_Player
  295. #==============================================================================
  296. class Game_Player
  297.   #--------------------------------------------------------------------------
  298.   # ● 方法重定义
  299.   #--------------------------------------------------------------------------
  300.   unless method_defined?(:sailcat_sepmouse_update)
  301.     alias sailcat_sepmouse_update update
  302.   end
  303.   #--------------------------------------------------------------------------
  304.   # ● 画面更新
  305.   #--------------------------------------------------------------------------
  306.   def update
  307.     update_mouse
  308.     sailcat_sepmouse_update
  309.   end
  310.   #--------------------------------------------------------------------------
  311.   # ● 鼠标响应更新
  312.   #--------------------------------------------------------------------------
  313.   def update_mouse
  314.     # 移动中、事件执行中、强制移动路线中、
  315.     # 信息窗口一个也不显示的时候
  316.     unless moving? or $game_system.map_interpreter.running? or
  317.            @move_route_forcing or $game_temp.message_window_showing
  318.       # 如果方向键被按下、主角就朝那个方向移动
  319.       case Mouse::MOVE_DIR8 ? mouse_dir8 : mouse_dir4
  320.       when 1
  321.         move_lower_left
  322.       when 2
  323.         move_down
  324.       when 3
  325.         move_lower_right
  326.       when 4
  327.         move_left
  328.       when 5
  329.         dx = Mouse.x - self.screen_x
  330.         dy = Mouse.y - self.screen_y + 16
  331.         if dx.abs >= dy.abs
  332.           dx < 0 ? turn_left : turn_right
  333.         else
  334.           dy < 0 ? turn_up : turn_down
  335.         end
  336.       when 6
  337.         move_right
  338.       when 7
  339.         move_upper_left
  340.       when 8
  341.         move_up
  342.       when 9
  343.         move_upper_right
  344.       end
  345.       Mouse.check_dblclick(:L) if Mouse.click?(:L)
  346.     end
  347.   end
  348.   #--------------------------------------------------------------------------
  349.   # ● 获得鼠标的指向四方向
  350.   #--------------------------------------------------------------------------
  351.   def mouse_dir4
  352.     return 0 unless Mouse.press?(:L)
  353.     dx = Mouse.x - self.screen_x
  354.     dy = Mouse.y - self.screen_y + 16
  355.     return 5 unless dx.abs > 16 or dy.abs > 16
  356.     dx.abs < dy.abs ? [8, 5, 2][(dy <=> 0) + 1] : [4, 5, 6][(dx <=> 0) + 1]
  357.   end
  358.   #--------------------------------------------------------------------------
  359.   # ● 获得鼠标的指向八方向
  360.   #--------------------------------------------------------------------------
  361.   def mouse_dir8
  362.     return 0 unless Mouse.press?(:L)
  363.     dx = Mouse.x - self.screen_x
  364.     dy = Mouse.y - self.screen_y + 16
  365.     return 5 unless dx.abs > 16 or dy.abs > 16
  366.     angle = (Math.atan2(dy, dx) / Math::PI * 180 + 202.5).round
  367.     [4, 7, 8, 9, 6, 3, 2, 1][angle / 45 & 7]
  368.   end
  369. end
  370.  
  371. #==============================================================================
  372. # ■ Window_Base
  373. #==============================================================================
  374. class Window_Base
  375.   #--------------------------------------------------------------------------
  376.   # ● 方法重定义
  377.   #--------------------------------------------------------------------------
  378.   unless method_defined?(:sailcat_sepmouse_update)
  379.     alias sailcat_sepmouse_update update
  380.   end
  381.   #--------------------------------------------------------------------------
  382.   # ● 相对于本窗口的坐标变换
  383.   #--------------------------------------------------------------------------
  384.   def mouse_x;          Mouse.x - x;              end
  385.   def mouse_y;          Mouse.y - y;              end
  386.   #--------------------------------------------------------------------------
  387.   # ● 相对于窗口内容的坐标变换
  388.   #--------------------------------------------------------------------------
  389.   def contents_x;       mouse_x - 16 + ox;        end
  390.   def contents_y;       mouse_y - 16 + oy;        end
  391.   #--------------------------------------------------------------------------
  392.   # ● 更新
  393.   #--------------------------------------------------------------------------
  394.   def update
  395.     update_mouse if respond_to_mouse?
  396.     sailcat_sepmouse_update
  397.   end
  398.   #--------------------------------------------------------------------------
  399.   # ● 指针位置判定
  400.   #--------------------------------------------------------------------------
  401.   def mouse_over?(rect = Rect.new(x, y, width, height))
  402.     mouse_x.between?(rect.x, rect.x + rect.width - 1) and
  403.     mouse_y.between?(rect.y, rect.y + rect.height - 1)
  404.   end
  405.   #--------------------------------------------------------------------------
  406.   # ● 响应鼠标判定
  407.   #--------------------------------------------------------------------------
  408.   def respond_to_mouse?
  409.     contents != nil and visible
  410.   end
  411.   #--------------------------------------------------------------------------
  412.   # ● 响应选择判定
  413.   #--------------------------------------------------------------------------
  414.   def respond_to_select?
  415.     false
  416.   end
  417.   #--------------------------------------------------------------------------
  418.   # ● 更新鼠标操作
  419.   #--------------------------------------------------------------------------
  420.   def update_mouse
  421.     update_mouse_scroll unless self.is_a?(Window_Selectable) and not active
  422.     update_mouse_select if respond_to_select?
  423.     update_cursor_rect if respond_to?(:update_cursor_rect)
  424.   end
  425.   #--------------------------------------------------------------------------
  426.   # ● 更新鼠标滚动窗口内容
  427.   #--------------------------------------------------------------------------
  428.   def update_mouse_scroll
  429.     # 内容可以水平滚动的情况下
  430.     if contents.width > width - 32
  431.       # 如果单击左右箭头区域
  432.       if Mouse.repeat?(:L) and mouse_y >= 16 and mouse_y < height - 16
  433.         if mouse_x >= 0 and mouse_x < 16
  434.           # 向左侧滚动窗口内容
  435.           scroll_left
  436.         elsif mouse_x >= width - 16 and mouse_x < width
  437.           # 向右侧滚动窗口内容
  438.           scroll_right
  439.         end
  440.       end
  441.     end
  442.     # 内容可以垂直滚动的情况下
  443.     if contents.height > height - 32
  444.       # 如果单击上下箭头区域
  445.       if Mouse.repeat?(:L) and mouse_x >= 16 and mouse_x < width - 16
  446.         if mouse_y >= 0 and mouse_y < 16
  447.           # 向上方滚动窗口内容
  448.           scroll_up
  449.         elsif mouse_y >= height - 16 and mouse_y < height
  450.           # 向下方滚动窗口内容
  451.           scroll_down
  452.         end
  453.       end
  454.     end
  455.   end
  456.   #--------------------------------------------------------------------------
  457.   # ● 滚动的单位X值
  458.   #--------------------------------------------------------------------------
  459.   def scroll_x
  460.     Font.default_size
  461.   end
  462.   #--------------------------------------------------------------------------
  463.   # ● 滚动的单位Y值
  464.   #--------------------------------------------------------------------------
  465.   def scroll_y
  466.     return self.line_height if respond_to?(:line_height)
  467.     32
  468.   end
  469.   #--------------------------------------------------------------------------
  470.   # ● 向左滚动
  471.   #--------------------------------------------------------------------------
  472.   def scroll_left
  473.     self.ox = [ox - scroll_x, 0].max
  474.   end
  475.   #--------------------------------------------------------------------------
  476.   # ● 向右滚动
  477.   #--------------------------------------------------------------------------
  478.   def scroll_right
  479.     # 保证显示整字
  480.     d = (contents.width + 32 - width) % scroll_x
  481.     d = scroll_x - d if d > 0
  482.     self.ox = [ox + scroll_x, contents.width + 32 - width + d].min
  483.   end
  484.   #--------------------------------------------------------------------------
  485.   # ● 向上滚动
  486.   #--------------------------------------------------------------------------
  487.   def scroll_up
  488.     self.oy = [oy - scroll_y, 0].max
  489.   end
  490.   #--------------------------------------------------------------------------
  491.   # ● 向下滚动
  492.   #--------------------------------------------------------------------------
  493.   def scroll_down
  494.     # 保证显示整行
  495.     d = (contents.height + 32 - height) % scroll_y
  496.     d = scroll_y - d if d > 0
  497.     self.oy = ([oy + scroll_y, contents.height + 32 - height + d].min)
  498.   end
  499. end
  500.  
  501. #==============================================================================
  502. # ■ Window_Selectable
  503. #==============================================================================
  504. class Window_Selectable
  505.   #--------------------------------------------------------------------------
  506.   # ● 响应选择判定
  507.   #--------------------------------------------------------------------------
  508.   def respond_to_select?
  509.     active
  510.   end
  511.   #--------------------------------------------------------------------------
  512.   # ● 响应鼠标选择
  513.   #--------------------------------------------------------------------------
  514.   def update_mouse_select
  515.     # 点击内容有效区域的情况下
  516.     if mouse_over?(Rect.new(16, 16, width - 32, height - 32))
  517.       # 点击左键的情况下,检查点击项目
  518.       update_click_select if Mouse.click?(:L)
  519.       # 按住左键的情况下,检查选择项目
  520.       update_check_select if Mouse.press?(:L)
  521.     end
  522.   end
  523.   #--------------------------------------------------------------------------
  524.   # ● 检查点击项目
  525.   #--------------------------------------------------------------------------
  526.   def update_click_select
  527.     # 如果鼠标所在的项就是当前项,检查双击
  528.     Mouse.check_dblclick(:L) if click_index == @index
  529.   end
  530.   #--------------------------------------------------------------------------
  531.   # ● 检查选择项目
  532.   #--------------------------------------------------------------------------
  533.   def update_check_select
  534.     # 如果被点击的项并非当前项
  535.     if click_index != @index
  536.       # 演奏光标SE
  537.       $game_system.se_play($data_system.cursor_se)
  538.       # 选中当前项
  539.       self.index = [[click_index, 0].max, @item_max - 1].min
  540.     end
  541.   end
  542.   #--------------------------------------------------------------------------
  543.   # ● 更新向上滚动
  544.   #--------------------------------------------------------------------------
  545.   def scroll_up
  546.     super
  547.     # 移到区域外的情况下,带动光标一起移动
  548.     if @index / @column_max > self.top_row + (self.page_row_max - 1)
  549.       $game_system.se_play($data_system.cursor_se)
  550.       self.index -= @column_max
  551.     end
  552.   end
  553.   #--------------------------------------------------------------------------
  554.   # ● 更新向下滚动
  555.   #--------------------------------------------------------------------------
  556.   def scroll_down
  557.     super
  558.     # 移到区域外的情况下,带动光标一起移动
  559.     if @index / @column_max < self.top_row
  560.       $game_system.se_play($data_system.cursor_se)
  561.       self.index = [@index + @column_max, @item_max - 1].min
  562.     end
  563.   end
  564.   #--------------------------------------------------------------------------
  565.   # ● 滚动的单位X值
  566.   #--------------------------------------------------------------------------
  567.   def scroll_x
  568.     padding = respond_to?(:cursor_padding) ? cursor_padding : 32
  569.     (contents.width + padding) / @column_max
  570.   end
  571.   #--------------------------------------------------------------------------
  572.   # ● 滚动的单位Y值
  573.   #--------------------------------------------------------------------------
  574.   def scroll_y
  575.     respond_to?(:item_height) ? self.item_height : super
  576.   end
  577.   #--------------------------------------------------------------------------
  578.   # ● 取得光标所指的项目
  579.   #--------------------------------------------------------------------------
  580.   def click_index
  581.     [@item_max - 1, contents_y / scroll_y * @column_max +
  582.       contents_x / scroll_x].min
  583.   end
  584. end
  585.  
  586. #==============================================================================
  587. # ■ Window_MenuStatus
  588. #==============================================================================
  589. class Window_MenuStatus
  590.   #--------------------------------------------------------------------------
  591.   # ● 项目的行高,但已被窗口增强核心重新定义的情况例外
  592.   #--------------------------------------------------------------------------
  593.   unless $sailcat_import[:WindowCore]
  594.     def item_height;  116;  end
  595.   end
  596. end
  597.  
  598. #==============================================================================
  599. # ■ Window_Target
  600. #==============================================================================
  601. class Window_Target
  602.   #--------------------------------------------------------------------------
  603.   # ● 项目的行高,但已被窗口增强核心重新定义的情况例外
  604.   #--------------------------------------------------------------------------
  605.   unless $sailcat_import[:WindowCore]
  606.     def item_height;  116;  end
  607.   end
  608. end
  609.  
  610. #==============================================================================
  611. # ■ Window_NameInput
  612. #==============================================================================
  613. class Window_NameInput
  614.   #--------------------------------------------------------------------------
  615.   # ● 响应选择判定
  616.   #--------------------------------------------------------------------------
  617.   def respond_to_select?
  618.     active
  619.   end
  620.   #--------------------------------------------------------------------------
  621.   # ● 响应鼠标选择
  622.   #--------------------------------------------------------------------------
  623.   def update_mouse_select
  624.     # 点击内容有效区域的情况下
  625.     if mouse_over?(Rect.new(16, 16, width - 32, height - 32))
  626.       # 点击左键的情况下,检查点击项目
  627.       update_click_select if Mouse.click?(:L)
  628.       # 按住左键的情况下,检查选择项目
  629.       update_check_select if Mouse.press?(:L)
  630.     end
  631.   end
  632.   #--------------------------------------------------------------------------
  633.   # ● 检查点击项目
  634.   #--------------------------------------------------------------------------
  635.   def update_click_select
  636.     # 如果鼠标所在的项就是当前项,处理双击
  637.     if click_index == @index
  638.       Mouse.begin_dblclick(:L) unless on_command?
  639.       Mouse.check_dblclick(:L)
  640.     end
  641.   end
  642.   #--------------------------------------------------------------------------
  643.   # ● 检查选择项目
  644.   #--------------------------------------------------------------------------
  645.   def update_check_select
  646.     # 如果被点击的项并非当前项
  647.     if click_index != @index and click_index >= 0
  648.       # 演奏光标SE
  649.       $game_system.se_play($data_system.cursor_se)
  650.       # 选中当前项
  651.       @index = [[click_index, 0].max, item_max - 1].min
  652.     end
  653.   end
  654.   #--------------------------------------------------------------------------
  655.   # ● [确定]的判定
  656.   #--------------------------------------------------------------------------
  657.   def on_command?
  658.     @index >= item_max - 1
  659.   end
  660.   #--------------------------------------------------------------------------
  661.   # ● 最大项目数
  662.   #--------------------------------------------------------------------------
  663.   def item_max
  664.     if respond_to?(:choices_max)
  665.       choices_max
  666.     elsif $sailcat_import[:WindowCore]
  667.       CHARACTER_TABLE_NORMAL.size
  668.     else
  669.       CHARACTER_TABLE.size + 1
  670.     end
  671.   end
  672.   #--------------------------------------------------------------------------
  673.   # ● 取得光标所指的项目
  674.   #--------------------------------------------------------------------------
  675.   def click_index
  676.     mx, my = mouse_x - 16, mouse_y - 16
  677.     0.upto(item_max - 1) do |i|
  678.       r = item_rect(i)
  679.       if (mx - r.x).between?(0, r.width - 1) and
  680.         (my - r.y).between?(0, r.height - 1)
  681.         return i
  682.       end
  683.     end
  684.     -1
  685.   end
  686.   #--------------------------------------------------------------------------
  687.   # ● 取得某项的光标区域
  688.   #--------------------------------------------------------------------------
  689.   def item_rect(index)
  690.     last_index = @index
  691.     @index = index
  692.     update_cursor_rect
  693.     rect = cursor_rect.clone
  694.     @index = last_index
  695.     update_cursor_rect
  696.     rect
  697.   end
  698. end
  699.  
  700. #==============================================================================
  701. # ■ Window_InputNumber
  702. #==============================================================================
  703. class Window_InputNumber
  704.   #--------------------------------------------------------------------------
  705.   # ● 方法重定义
  706.   #--------------------------------------------------------------------------
  707.   unless method_defined?(:sailcat_sepmouse_initialize)
  708.     alias sailcat_sepmouse_initialize initialize
  709.     alias sailcat_sepmouse_update_cursor_rect update_cursor_rect
  710.   end
  711.   #--------------------------------------------------------------------------
  712.   # ● 初始化对像
  713.   #     digits_max : 位数
  714.   #--------------------------------------------------------------------------
  715.   def initialize(digits_max)
  716.     @up_arrow = Sprite.new
  717.     @down_arrow = Sprite.new
  718.     sailcat_sepmouse_initialize(digits_max)
  719.     @up_arrow.bitmap = @down_arrow.bitmap = self.windowskin
  720.     @up_arrow.src_rect = Rect.new(self.windowskin.width - 40, 16, 16, 7)
  721.     @down_arrow.src_rect = Rect.new(self.windowskin.width - 40, 41, 16, 7)
  722.     @up_arrow.z = @down_arrow.z = z + 1
  723.   end
  724.   #--------------------------------------------------------------------------
  725.   # ● 设置内容不透明度
  726.   #--------------------------------------------------------------------------
  727.   def contents_opacity=(opacity)
  728.     super
  729.     @up_arrow.opacity = @down_arrow.opacity = opacity
  730.   end
  731.   #--------------------------------------------------------------------------
  732.   # ● 更新光标矩形
  733.   #--------------------------------------------------------------------------
  734.   def update_cursor_rect
  735.     sailcat_sepmouse_update_cursor_rect
  736.     offset = $sailcat_import[:WindowCore] ? 24 + @cursor_width >> 1 : 16
  737.     @up_arrow.x = @down_arrow.x = x + @index * @cursor_width + offset
  738.     @up_arrow.y = y + 7
  739.     @down_arrow.y = y + height - 14
  740.   end
  741.   #--------------------------------------------------------------------------
  742.   # ● 释放
  743.   #--------------------------------------------------------------------------
  744.   def dispose
  745.     @up_arrow.dispose
  746.     @down_arrow.dispose
  747.     super
  748.   end
  749.   #--------------------------------------------------------------------------
  750.   # ● 响应选择判定
  751.   #--------------------------------------------------------------------------
  752.   def respond_to_select?
  753.     active
  754.   end
  755.   #--------------------------------------------------------------------------
  756.   # ● 响应鼠标选择
  757.   #--------------------------------------------------------------------------
  758.   def update_mouse_select
  759.     # 点击内容有效区域的情况下
  760.     if mouse_over?(Rect.new(16, 16, width - 32, height - 32))
  761.       # 点击左键的情况下,检查点击项目
  762.       update_click_select if Mouse.click?(:L)
  763.       # 按住左键的情况下,检查选择项目
  764.       update_check_select if Mouse.press?(:L)
  765.     # 点击上箭头的情况下
  766.     elsif Mouse.x.between?(@up_arrow.x, @up_arrow.x + 15) and
  767.       Mouse.y.between?(@up_arrow.y, @up_arrow.y + 6)
  768.       update_value(+2) if Mouse.repeat?(:L)
  769.     # 点击下箭头的情况下
  770.     elsif Mouse.x.between?(@down_arrow.x, @down_arrow.x + 15) and
  771.       Mouse.y.between?(@down_arrow.y, @down_arrow.y + 6)
  772.       update_value(-2) if Mouse.repeat?(:L)
  773.     end
  774.   end
  775.   #--------------------------------------------------------------------------
  776.   # ● 更新数值
  777.   #--------------------------------------------------------------------------
  778.   unless $sailcat_import[:WindowCore]
  779.     def update_value(delta)
  780.       $game_system.se_play($data_system.cursor_se)
  781.       place = 10 ** (@digits_max - 1 - @index)
  782.       n = @number / place % 10
  783.       @number -= n * place
  784.       n = (n + 1) % 10 if delta > 0
  785.       n = (n + 9) % 10 if delta < 0
  786.       @number += n * place
  787.       refresh
  788.     end
  789.   end
  790.   #--------------------------------------------------------------------------
  791.   # ● 检查点击项目
  792.   #--------------------------------------------------------------------------
  793.   def update_click_select
  794.     # 如果鼠标所在的项就是当前项,检查双击
  795.     Mouse.check_dblclick(:L) if click_index == @index
  796.   end
  797.   #--------------------------------------------------------------------------
  798.   # ● 检查选择项目
  799.   #--------------------------------------------------------------------------
  800.   def update_check_select
  801.     # 如果被点击的项并非当前项
  802.     if click_index != @index
  803.       # 演奏光标SE
  804.       $game_system.se_play($data_system.cursor_se)
  805.       # 选中当前项
  806.       @index = [[click_index, 0].max, @digits_max - 1].min
  807.     end
  808.   end
  809.   #--------------------------------------------------------------------------
  810.   # ● 取得光标所指的项目
  811.   #--------------------------------------------------------------------------
  812.   def click_index
  813.     contents_x / @cursor_width
  814.   end
  815. end
  816.  
  817. #==============================================================================
  818. # ■ Window_Message
  819. #==============================================================================
  820. class Window_Message
  821.   #--------------------------------------------------------------------------
  822.   # ● 响应选择判定
  823.   #--------------------------------------------------------------------------
  824.   def respond_to_select?
  825.     contents_opacity == 255 and @input_number_window.nil?
  826.   end
  827.   #--------------------------------------------------------------------------
  828.   # ● 响应鼠标选择
  829.   #--------------------------------------------------------------------------
  830.   def update_mouse_select
  831.     # 当前是消息结束待机的情况下
  832.     if pause or (@text and not @text.empty?)
  833.       # 左键单击视同双击
  834.       if Mouse.click?(:L)
  835.         Mouse.begin_dblclick(:L)
  836.         Mouse.check_dblclick(:L)
  837.       end
  838.     # 当前是处理选择项的情况下,执行原处理
  839.     elsif active
  840.       super
  841.     end
  842.   end
  843.   #--------------------------------------------------------------------------
  844.   # ● 检查选择项目
  845.   #--------------------------------------------------------------------------
  846.   def update_check_select
  847.     # 点击项不在列表区域的情况下,返回
  848.     return if click_index < 0
  849.     super
  850.   end
  851.   #--------------------------------------------------------------------------
  852.   # ● 取得光标所指的项目
  853.   #--------------------------------------------------------------------------
  854.   def click_index
  855.     # 变换坐标为相对于内容的值
  856.     mx, my = mouse_x - 16, mouse_y - 16 - $game_temp.choice_start * scroll_y
  857.     # 多列的情况下考虑列间距
  858.     padding = respond_to?(:cursor_padding) ? cursor_padding : 32
  859.     [@item_max - 1, (self.top_row + my / scroll_y) * @column_max +
  860.       mx / ((contents.width + padding) / @column_max)].min
  861.   end
  862. end
  863.  
  864. #==============================================================================
  865. # ■ Arrow_Base
  866. #==============================================================================
  867. class Arrow_Base
  868.   #--------------------------------------------------------------------------
  869.   # ● 方法重定义
  870.   #--------------------------------------------------------------------------
  871.   unless method_defined?(:sailcat_sepmouse_update)
  872.     alias sailcat_sepmouse_update update
  873.   end
  874.   #--------------------------------------------------------------------------
  875.   # ● 更新
  876.   #--------------------------------------------------------------------------
  877.   def update
  878.     update_mouse
  879.     sailcat_sepmouse_update
  880.   end
  881.   #--------------------------------------------------------------------------
  882.   # ● 更新鼠标处理
  883.   #--------------------------------------------------------------------------
  884.   def update_mouse
  885.     # 点击左键,指向有效的情况下
  886.     if (Mouse.trigger?(:L) or Mouse.release?(:L)) and click_index >= 0
  887.       # 点击当前指向战斗者的情况下
  888.       if click_index == @index
  889.         # 执行双击检查
  890.         Mouse.check_dblclick(:L) if Mouse.click?(:L)
  891.       # 点击的不是当前战斗者的情况下
  892.       else
  893.         # 演奏光标 SE
  894.         $game_system.se_play($data_system.cursor_se)
  895.         @index = click_index
  896.         # 开始准备双击
  897.         Mouse.begin_dblclick(:L) if Mouse.click?(:L)
  898.       end
  899.     end
  900.   end
  901.   #--------------------------------------------------------------------------
  902.   # ● 取得光标所指的项目
  903.   #--------------------------------------------------------------------------
  904.   def click_index
  905.     members.sort {|a, b| b.screen_z - a.screen_z}.each do |c|
  906.       next if c.is_a?(Game_Enemy) and not c.exist?
  907.       bitmap = RPG::Cache.battler(c.battler_name, c.battler_hue)
  908.       x = c.screen_x - (bitmap.width >> 1)
  909.       y = c.screen_y - bitmap.height
  910.       if Mouse.x.between?(x, x + bitmap.width - 1) and
  911.         Mouse.y.between?(y, y + bitmap.height - 1)
  912.         return c.index
  913.       end
  914.     end
  915.     return -1
  916.   end
  917. end
  918.  
  919. #==============================================================================
  920. # ■ Arrow_Enemy
  921. #==============================================================================
  922. class Arrow_Enemy
  923.   #--------------------------------------------------------------------------
  924.   # ● 队伍成员
  925.   #--------------------------------------------------------------------------
  926.   def members;          $game_troop.enemies;          end
  927. end
  928.  
  929. #==============================================================================
  930. # ■ Arrow_Actor
  931. #==============================================================================
  932. class Arrow_Actor
  933.   #--------------------------------------------------------------------------
  934.   # ● 队伍成员
  935.   #--------------------------------------------------------------------------
  936.   def members;          $game_party.actors;           end
  937. end
  938.  
  939. #==============================================================================
  940. # ■ Scene_File
  941. #==============================================================================
  942. class Scene_File
  943.   #--------------------------------------------------------------------------
  944.   # ● 方法重定义
  945.   #--------------------------------------------------------------------------
  946.   unless method_defined?(:sailcat_sepmouse_update)
  947.     alias sailcat_sepmouse_update update
  948.   end
  949.   #--------------------------------------------------------------------------
  950.   # ● 更新
  951.   #--------------------------------------------------------------------------
  952.   def update
  953.     update_mouse
  954.     sailcat_sepmouse_update
  955.   end
  956.   #--------------------------------------------------------------------------
  957.   # ● 更新鼠标处理
  958.   #--------------------------------------------------------------------------
  959.   def update_mouse
  960.     # 点击左键,窗口有效的情况下
  961.     if (Mouse.press?(:L) or Mouse.release?(:L)) and click_index >= 0
  962.       # 如果被点击的项就是当前项
  963.       if click_index + (@top_index || 0) == @file_index
  964.         # 执行双击检查
  965.         Mouse.check_dblclick(:L) if Mouse.click?(:L)
  966.       # 如果被点击的项并非当前项
  967.       elsif @savefile_windows[click_index].is_a?(Window_SaveFile)
  968.         # 演奏光标SE
  969.         $game_system.se_play($data_system.cursor_se)
  970.         # 选中当前项
  971.         @savefile_windows[@file_index % 4].selected = false
  972.         @file_index = [[click_index, 0].max, @savefile_windows.size - 1].min +
  973.           (@top_index || 0)
  974.         @savefile_windows[@file_index % 4].selected = true
  975.         # 开始准备双击
  976.         Mouse.begin_dblclick(:L) if Mouse.click?(:L)
  977.       end
  978.     end
  979.   end
  980.   #--------------------------------------------------------------------------
  981.   # ● 取得光标所指的项目
  982.   #--------------------------------------------------------------------------
  983.   def click_index
  984.     @savefile_windows.each_with_index do |w, i|
  985.       return i if w.mouse_over?
  986.     end
  987.     return -1
  988.   end
  989. end
  990.  
  991. #==============================================================================
  992. # ■ Scene_Battle
  993. #==============================================================================
  994. class Scene_Battle
  995.   #--------------------------------------------------------------------------
  996.   # ● 方法重定义
  997.   #--------------------------------------------------------------------------
  998.   unless method_defined?(:sailcat_sepmouse_update_phase5)
  999.     alias sailcat_sepmouse_update_phase5 update_phase5
  1000.   end
  1001.   #--------------------------------------------------------------------------
  1002.   # ● 画面更新 (结束战斗回合)
  1003.   #--------------------------------------------------------------------------
  1004.   def update_phase5
  1005.     sailcat_sepmouse_update_phase5
  1006.     update_mouse_phase5
  1007.   end
  1008.   #--------------------------------------------------------------------------
  1009.   # ● 更新鼠标处理 (结束战斗回合)
  1010.   #--------------------------------------------------------------------------
  1011.   def update_mouse_phase5
  1012.     # 等待计数已归 0 ,按左或右键的情况下
  1013.     if @phase5_wait_count == 0 and (Mouse.click?(:L) or Mouse.click?(:R))
  1014.       # 战斗结束
  1015.       battle_end(0)
  1016.     end
  1017.   end
  1018. end
  1019.  
  1020. #==============================================================================
  1021. # ■ Scene_Name
  1022. #==============================================================================
  1023. class Scene_Name
  1024.   #--------------------------------------------------------------------------
  1025.   # ● 方法重定义
  1026.   #--------------------------------------------------------------------------
  1027.   unless method_defined?(:sailcat_sepmouse_update)
  1028.     alias sailcat_sepmouse_update update
  1029.   end
  1030.   #--------------------------------------------------------------------------
  1031.   # ● 更新
  1032.   #--------------------------------------------------------------------------
  1033.   def update
  1034.     update_mouse
  1035.     sailcat_sepmouse_update
  1036.   end
  1037.   #--------------------------------------------------------------------------
  1038.   # ● 更新鼠标处理
  1039.   #--------------------------------------------------------------------------
  1040.   def update_mouse
  1041.     unless $sailcat_import[:WindowCore]
  1042.       # 右击鼠标的情况下
  1043.       if Mouse.click?(:R) and @edit_window.index > 0
  1044.         # 演奏取消 SE
  1045.         $game_system.se_play($data_system.cancel_se)
  1046.         # 删除文字
  1047.         @edit_window.back
  1048.       end
  1049.     end
  1050.   end
  1051. end
  1052.  
  1053. #==============================================================================
  1054. # ■ Scene_Gameover
  1055. #==============================================================================
  1056. class Scene_Gameover
  1057.   #--------------------------------------------------------------------------
  1058.   # ● 方法重定义
  1059.   #--------------------------------------------------------------------------
  1060.   unless method_defined?(:sailcat_sepmouse_update)
  1061.     alias sailcat_sepmouse_update update
  1062.   end
  1063.   #--------------------------------------------------------------------------
  1064.   # ● 更新
  1065.   #--------------------------------------------------------------------------
  1066.   def update
  1067.     update_mouse
  1068.     sailcat_sepmouse_update
  1069.   end
  1070.   #--------------------------------------------------------------------------
  1071.   # ● 更新鼠标处理
  1072.   #--------------------------------------------------------------------------
  1073.   def update_mouse
  1074.     # 点击鼠标左键或右键的情况下
  1075.     if Mouse.click?(:L) or Mouse.click?(:R)
  1076.       # 切换到标题画面
  1077.       $scene = Scene_Title.new
  1078.     end
  1079.   end
  1080. end

评分

参与人数 5+5 收起 理由
kimi1123 + 1 我很赞同
mori13 + 1 塞糖
king + 1 精品文章
梦幻想 + 1 塞糖
RedWK + 1 塞糖

查看全部评分

SailCat (小猫子·要开心一点) 共上站 24 次,发表过 11 篇文章 上 次 在: [2006年01月28日11:41:18 星期六] 从 [162.105.120.91] 到本站一游。

Lv5.捕梦者

梦石
0
星屑
25275
在线时间
1535 小时
注册时间
2006-1-10
帖子
2063

开拓者第一届地图绘制大赛RTP组第四名

发表于 2018-1-13 18:39:29 | 显示全部楼层
试用了一下,必须有SEP核心插件
然后,不要双击了,我觉得鼠标左键会被按坏

我只是进行几次战斗,操作上手感不好,我总觉得鼠标按键坏掉,因为点了一次没用,然后我就连击
菜单方面也是!为什么要双击?

还是我习惯MV的鼠标,都是鼠标操作比较流畅,总之确定,就点击左键,取消就右键
实在不习惯双击

点评

SEP核心其实就是系统默认引擎的部分重写,什么新增项也没有,理论上说不可能缺少它就无法运行的啊。能把出错信息贴一下吗?  发表于 2018-1-13 19:09
很奇怪,我在默认新建的工程中直接插入这个脚本是可以直接运行的,并不需要SEP核心插件…… 另外,不要双击的话改个设置就好 C_DBLCLICK = false  发表于 2018-1-13 19:02
右键倒是很灵敏,我老怀疑我的鼠标左键坏掉……取消连击2次吧,一次点击就行  发表于 2018-1-13 18:40
MV帮助 http://miaowm5.github.io/RMMV-F1/日复一日,年复一年人还是保留一点自我兴趣的好啊~~~忘记过去 ,这样我就可以  放弃未来了……哭~~终于找回以前的头像了,哎~~原来我是那么的想念阿……
画地图没灵感?很烦?很无聊 【 戳 我 】一 大 波 地 图 在 等 你  \^0^/
我的游戏
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
25275
在线时间
1535 小时
注册时间
2006-1-10
帖子
2063

开拓者第一届地图绘制大赛RTP组第四名

发表于 2018-1-13 19:16:14 | 显示全部楼层
直接丢进12年的工程测试,没有任何冲突!  
对于事件类制作的小游戏,按下空格键判断无效,得用Mouse.press?(C)来代替?
右键呼出菜单,对于图片菜单无效!
其他的,1.没有自动寻路 2.没有冲刺加速
建议一直按鼠标用加速效果!
点击行走时,觉得人物好慢啊

点评

自动寻路问题在于目前所有算法都不能直接套用,因为角色行走和其他NPC是并行处理,预设路径上一旦挡了人以后都会%$*&%,并且明雷遇到怪也不触发   发表于 2018-1-13 19:21
自动寻路会另外发布的,毕竟不是鼠标专用脚本,冲刺加速这个怕引起其他问题。 图片菜单及事件问题,事件菜单里的判定用的是press?,我改改解释器.   发表于 2018-1-13 19:18
MV帮助 http://miaowm5.github.io/RMMV-F1/日复一日,年复一年人还是保留一点自我兴趣的好啊~~~忘记过去 ,这样我就可以  放弃未来了……哭~~终于找回以前的头像了,哎~~原来我是那么的想念阿……
画地图没灵感?很烦?很无聊 【 戳 我 】一 大 波 地 图 在 等 你  \^0^/
我的游戏
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
4568
在线时间
1203 小时
注册时间
2016-4-7
帖子
982

开拓者

发表于 2018-1-13 20:11:31 | 显示全部楼层
本帖最后由 shitake 于 2018-1-13 20:13 编辑

支持滚轮?【逃

不过说到双击的话 想起那个frp里的操作 用一个filter轻松把单击事件组合成双击事件

点评

是的 要自己折腾一大堆win32api 贼几把麻烦 尤其是不靠dll纯ruby的话 2333  发表于 2018-1-15 00:00
滚轮的支持API太复杂了……我宁可自己黑了个Window_InputNumber,还算好用……但还是想把滚轮折腾出来啊……  发表于 2018-1-13 21:09
附庸的附庸不是我的附庸,女儿的女儿还是我的女儿。CK2沉迷ing
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1803
在线时间
133 小时
注册时间
2013-10-6
帖子
193
发表于 2018-1-14 00:20:02 | 显示全部楼层
其实刚才说的回调的问题搞定了之后,建议鼠标点击也用消息处理最好。GetAsyncKeyState可靠性太低了,容易吞输入;双击判定间隔之类的也是遵循用户设置为好。
←你看到一只经常潜水的萌新。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1598
在线时间
530 小时
注册时间
2017-10-13
帖子
52
发表于 2018-1-18 19:40:50 | 显示全部楼层
@SailCat  能不能加个开关。。
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

遠航の猫咪

梦石
3
星屑
22385
在线时间
2335 小时
注册时间
2005-10-15
帖子
1160

开拓者

 楼主| 发表于 2018-1-21 00:11:50 | 显示全部楼层
更新0.93版本,另外双击C键的设置默认关掉了,有需要的可以打开。
SailCat (小猫子·要开心一点) 共上站 24 次,发表过 11 篇文章 上 次 在: [2006年01月28日11:41:18 星期六] 从 [162.105.120.91] 到本站一游。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2709
在线时间
166 小时
注册时间
2018-1-19
帖子
89
发表于 2018-1-21 14:36:38 | 显示全部楼层
哇,真棒,支持!终于有开关了!虽然偶昨天把另一个鼠标版本试图加了开关但是不知道有没有什么后果。
不过想请问,能否在启用鼠标脚本后让电脑自带的鼠标消失呢?现在看到的情况是移动鼠标的时候新鼠标图标和原鼠标图标共存,导致有点分身的感觉
另外,偶试图更改了鼠标图片的路径Graphics/Icons/001-Weapon01.png,就会显示70行Nomethoderror, undefined method 'CURSOR_PIC' for SailCat::Mouse_Config:Module
虽然检查了过去,但是不理解为什么会变成未定义的。

点评

这个的话,偶翻了原来的鼠标脚本,有个叫ShowCursor的指令可以隐藏自带鼠标  发表于 2018-1-21 16:34
alt+enter全屏后,自带的鼠标就没有了……如果是窗口模式的话不太清楚,我研究一下。  发表于 2018-1-21 16:07
求勾搭QwQ(bu)会使用脚本和事件QwQ虽然脚本还只是初级程度,还在学习ingQwQ
平常很闲,特别想回答问题和解决问题。再求勾搭呜呜呜QWQ
QQ:841155947
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2709
在线时间
166 小时
注册时间
2018-1-19
帖子
89
发表于 2018-1-21 14:39:49 | 显示全部楼层
mori13 发表于 2018-1-21 14:36
哇,真棒,支持!终于有开关了!虽然偶昨天把另一个鼠标版本试图加了开关但是不知道有没有什么后果。
不过 ...

喔偶知道为什么会出这个错误了,乃把SailCat::Mouse_Config::CURSOR_PIC打成了SailCat::Mouse_Config.CURSOR_PIC了!,另外RPG::Cache.picture默认到一定是在picture里的文件了呢....鼠标图标的话不算经常放那里的感觉呢,嘛~不过还是很支持

点评

鼠标点击事件干嘛,启动吗?主角隔着八丈远启动事件好像有点什么不对……现在是你走到事件边上点击事件就可以启动之了……另外我在更新寻路.  发表于 2018-1-21 16:08
另外,希望能添加鼠标点击事件的功能同时主角不会乱动的功能。(当然,这好像和鼠标移动主角有些冲突了)  发表于 2018-1-21 15:44
求勾搭QwQ(bu)会使用脚本和事件QwQ虽然脚本还只是初级程度,还在学习ingQwQ
平常很闲,特别想回答问题和解决问题。再求勾搭呜呜呜QWQ
QQ:841155947
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2709
在线时间
166 小时
注册时间
2018-1-19
帖子
89
发表于 2018-1-21 16:46:44 | 显示全部楼层
鼠标点击事件来启动事件只是一个功能,可以用来点击图片上的按钮,或者是技能的图标之类的呀,或者是双击某些图案,以及可以类似于https://rpg.blue/thread-239820-1-1.html或者https://rpg.blue/thread-191580-1-1.html之类的讨论。顺便可以加个开关关闭鼠标控制角色移动和开关这个功能,防止点击的时候移动什么的...嘛,只是个建议啦(吐舌)
求勾搭QwQ(bu)会使用脚本和事件QwQ虽然脚本还只是初级程度,还在学习ingQwQ
平常很闲,特别想回答问题和解决问题。再求勾搭呜呜呜QWQ
QQ:841155947
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-3-29 03:15

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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