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

Project1

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

[已经解决] 怎么用鼠标一点就执行事件?

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
30 小时
注册时间
2012-3-6
帖子
35
跳转到指定楼层
1
发表于 2012-4-7 12:20:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 「旅」 于 2012-4-8 12:19 编辑

我已经放好了鼠标脚本了  怎么才能不用主角接触事件  一点鼠标就可以执行事件  怎么弄的

????

Lv3.寻梦者 (版主)

梦石
0
星屑
1852
在线时间
2678 小时
注册时间
2010-6-26
帖子
3197

开拓者整合系统大赛RMVX达人剧作品鉴家

2
发表于 2012-4-7 12:51:26 | 只看该作者
本帖最后由 月下耶鲁夫 于 2012-4-7 12:51 编辑

我记得是要加   注释 Npc

      情人怨遥夜,竟夕起相思
回复

使用道具 举报

Lv1.梦旅人

66RPG我的

梦石
0
星屑
163
在线时间
491 小时
注册时间
2012-1-16
帖子
1993
3
发表于 2012-4-15 15:04:20 | 只看该作者
本帖最后由 永远の路克酱 于 2012-4-15 17:04 编辑

请复制以下两个脚本到mina前,就可以实现无限距离响应事件。
本脚本还有两个功能:1、接触时有音效  2、接触时换鼠标图标(比如说换成手指)

在事件的名称里输入:mouse=选中的鼠标图标(如mouse2.png) play_se=要播放的音效(如015-Jump01)
鼠标脚本:
  1. #==============================================================================
  2. # 本脚本来自[url]www.66RPG.com[/url],使用和转载请保留此信息
  3. #==============================================================================
  4. #=================以下两个用来调整战斗时的手感问题,可以自己试试。
  5. $敌人选框扩大 = 20
  6. $角色选框扩大 = 30

  7. #==============================================================================
  8. # API调用
  9. #==============================================================================
  10. $ShowCursor = Win32API.new("user32", "ShowCursor", 'i', 'l')
  11. $GetCursorPos = Win32API.new("user32", "GetCursorPos", 'p', 'i')
  12. $ScreenToClient = Win32API.new("user32", "ScreenToClient", 'ip', 'i')
  13. $GetActiveWindow = Win32API.new("user32", "GetActiveWindow", nil, 'l')
  14. $Window_HWND = $GetActiveWindow.call
  15. $GetKeyState = Win32API.new("user32", "GetKeyState", 'i', 'i')
  16. #$FindWindow = Win32API.new("user32", "FindWindow", 'pp', 'i')
  17. #$HookStart  = Win32API.new("mouse_hook.dll", "HookStart", 'i', nil)
  18. #$HookEnd  = Win32API.new("mouse_hook.dll", "HookEnd", nil, nil)
  19. #$GetMouseStatus  = Win32API.new("mouse_hook.dll", "GetMouseStatus", 'i', 'i')
  20. #$Window_HWND = $FindWindow.call(nil, 'mousetry')
  21. module Mouse  
  22.   LEFT = 0x01
  23.   RIGHT = 0x02
  24.   def self.name
  25.     @name
  26.   end
  27.   def self.init(name="001-Weapon01.png",sprite = nil)
  28. #   $HookStart.call($Window_HWND)
  29.     $ShowCursor.call(0)
  30.     @name=name
  31.     @show_cursor = false
  32.    
  33.     @mouse_sprite = Sprite.new
  34.     @mouse_sprite.z = 99999
  35.     @mouse_sprite.bitmap = Bitmap.new("Graphics/Icons/#{name}")
  36.     #@mouse_sprite.bitmap.fill_rect(Rect.new(0, 0, 32, 32), Color.new(0, 0, 0))
  37.     @left_press = false
  38.     @right_press = false
  39.     @left_trigger = false
  40.     @right_trigger = false
  41.     @left_repeat = false
  42.     @right_repeat = false
  43.     @click_lock = false
  44.    
  45.     update
  46.   end
  47.   def self.exit
  48.     @mouse_sprite.bitmap.dispose
  49.     @mouse_sprite.dispose
  50.     @show_cursor = true
  51. #    $HookEnd.call
  52.     $ShowCursor.call(1)
  53.   end
  54.   def self.mouse_debug
  55.     return @mouse_debug.bitmap
  56.   end
  57.   def self.update
  58.     left_down = $GetKeyState.call(0x01)
  59.     right_down = $GetKeyState.call(0x02)
  60.    
  61.     @click_lock = false
  62.     mouse_x, mouse_y = self.get_mouse_pos
  63.     if @mouse_sprite != nil
  64.       @mouse_sprite.x = mouse_x
  65.       @mouse_sprite.y = mouse_y
  66.     end
  67.     if left_down[7] == 1
  68.       @left_repeat = (not @left_repeat)
  69.       @left_trigger = (not @left_press)
  70.       @left_press = true
  71.     else
  72.       @left_press = false
  73.       @left_trigger = false
  74.       @left_repeat = false
  75.     end
  76.     if right_down[7] == 1
  77.       @right_repeat = (not @right_repeat)
  78.       @right_trigger = (not @right_press)
  79.       @right_press = true
  80.     else
  81.       @right_press = false
  82.       @right_trigger = false
  83.       @right_repeat = false
  84.     end
  85.   end
  86.   def self.get_mouse_pos
  87.     point_var = [0, 0].pack('ll')
  88.     if $GetCursorPos.call(point_var) != 0
  89.       if $ScreenToClient.call($Window_HWND, point_var) != 0
  90.         x, y = point_var.unpack('ll')
  91.         if (x < 0) or (x > 10000) then x = 0 end
  92.         if (y < 0) or (y > 10000) then y = 0 end
  93.         if x > 640 then x = 640 end
  94.         if y > 480 then y = 480 end
  95.         return x, y
  96.       else
  97.         return 0, 0
  98.       end
  99.     else
  100.       return 0, 0
  101.     end
  102.   end
  103.   def self.press?(mouse_code)
  104.     if mouse_code == LEFT
  105.       if @click_lock
  106.         return false
  107.       else
  108.         return @left_press
  109.       end
  110.     elsif mouse_code == RIGHT
  111.       return @right_press
  112.     else
  113.       return false
  114.     end
  115.   end
  116.   def self.trigger?(mouse_code)
  117.     if mouse_code == LEFT
  118.       if @click_lock
  119.         return false
  120.       else
  121.         return @left_trigger
  122.       end
  123.     elsif mouse_code == RIGHT
  124.       return @right_trigger
  125.     else
  126.       return false
  127.     end
  128.   end
  129.   def self.repeat?(mouse_code)
  130.     if mouse_code == LEFT
  131.       if @click_lock
  132.         return false
  133.       else
  134.         return @left_repeat
  135.       end
  136.     elsif mouse_code == RIGHT
  137.       return @right_repeat
  138.     else
  139.       return false
  140.     end
  141.   end
  142.   def self.click_lock?
  143.     return @click_lock
  144.   end
  145.   def self.click_lock
  146.     @click_lock = true
  147.   end
  148.   def self.click_unlock
  149.     @click_lock = false
  150.   end
  151. end
  152. module Input
  153.   if @self_update == nil
  154.     @self_update = method('update')
  155.     @self_press = method('press?')
  156.     @self_trigger = method('trigger?')
  157.     @self_repeat = method('repeat?')
  158.   end
  159.   def self.update
  160.     @self_update.call
  161.     Mouse.update
  162.   end
  163.   def self.press?(key_code)
  164.     if @self_press.call(key_code)
  165.       return true
  166.     end
  167.     if key_code == C
  168.       return Mouse.press?(Mouse::LEFT)
  169.     elsif key_code == B
  170.       return Mouse.press?(Mouse::RIGHT)
  171.     else
  172.       return @self_press.call(key_code)
  173.     end
  174.   end
  175.   def self.trigger?(key_code)
  176.     if @self_trigger.call(key_code)
  177.       return true
  178.     end
  179.     if key_code == C
  180.       return Mouse.trigger?(Mouse::LEFT)
  181.     elsif key_code == B
  182.       return Mouse.trigger?(Mouse::RIGHT)
  183.     else
  184.       return @self_trigger.call(key_code)
  185.     end
  186.   end
  187.   def self.repeat?(key_code)
  188.     if @self_repeat.call(key_code)
  189.       return true
  190.     end
  191.     if key_code == C
  192.       return Mouse.repeat?(Mouse::LEFT)
  193.     elsif key_code == B
  194.       return Mouse.repeat?(Mouse::RIGHT)
  195.     else
  196.       return @self_repeat.call(key_code)
  197.     end
  198.   end
  199. end
  200. class Window_Selectable
  201.   if @self_alias == nil
  202.     alias self_update update
  203.     @self_alias = true
  204.   end
  205.   def update
  206.     #self.cursor_rect.empty
  207.     self_update
  208.     if self.active and @item_max > 0
  209.       index_var = @index
  210.       tp_index = @index
  211.       mouse_x, mouse_y = Mouse.get_mouse_pos
  212.       mouse_not_in_rect = true
  213.       for i in 0...@item_max
  214.         @index = i
  215.         update_cursor_rect
  216.         top_x = self.cursor_rect.x + self.x + 16
  217.         top_y = self.cursor_rect.y + self.y + 16
  218.         bottom_x = top_x + self.cursor_rect.width
  219.         bottom_y = top_y + self.cursor_rect.height
  220.         if (mouse_x > top_x) and (mouse_y > top_y) and
  221.            (mouse_x < bottom_x) and (mouse_y < bottom_y)
  222.           mouse_not_in_rect = false
  223.           if tp_index != @index
  224.             tp_index = @index
  225.             $game_system.se_play($data_system.cursor_se)
  226.           end
  227.           break
  228.         end
  229.       end
  230.       if mouse_not_in_rect
  231.         @index = index_var
  232.         update_cursor_rect
  233.         Mouse.click_lock
  234.       else
  235.         Mouse.click_unlock               
  236.       end
  237.     end
  238.   end
  239. end
  240. class Window_NameInput
  241.   if @self_alias == nil
  242.     alias self_update update
  243.     @self_alias = true
  244.   end
  245.   def update
  246.     #self.cursor_rect.empty
  247.     self_update
  248.     if self.active
  249.       index_var = @index
  250.       mouse_x, mouse_y = Mouse.get_mouse_pos
  251.       mouse_not_in_rect = true
  252.       for i in (0...CHARACTER_TABLE.size).to_a.push(180)
  253.         @index = i
  254.         update_cursor_rect
  255.         top_x = self.cursor_rect.x + self.x + 16
  256.         top_y = self.cursor_rect.y + self.y + 16
  257.         bottom_x = top_x + self.cursor_rect.width
  258.         bottom_y = top_y + self.cursor_rect.height
  259.         #
  260.         if (mouse_x > top_x) and (mouse_y > top_y) and
  261.            (mouse_x < bottom_x) and (mouse_y < bottom_y)
  262.           mouse_not_in_rect = false
  263.           break
  264.         end
  265.       end
  266.       if mouse_not_in_rect
  267.         @index = index_var
  268.         update_cursor_rect
  269.         Mouse.click_lock
  270.       else
  271.         Mouse.click_unlock
  272.       end
  273.     end
  274.   end
  275. end
  276. class Window_InputNumber
  277.   if @self_alias == nil
  278.     alias self_update update
  279.     @self_alias = true
  280.   end
  281.   def update
  282.     #self.cursor_rect.empty
  283.     self_update
  284.     mouse_x, mouse_y = Mouse.get_mouse_pos
  285.     if self.active and @digits_max > 0
  286.       index_var = @index
  287.       mouse_not_in_rect = true
  288.       for i in 0...@digits_max
  289.         @index = i
  290.         update_cursor_rect
  291.         top_x = self.cursor_rect.x + self.x + 16
  292.         bottom_x = top_x + self.cursor_rect.width
  293.         #
  294.         if (mouse_x > top_x) and (mouse_x < bottom_x)
  295.           mouse_not_in_rect = false
  296.           break
  297.         end
  298.       end
  299.       if mouse_not_in_rect
  300.         @index = index_var
  301.         update_cursor_rect
  302.         Mouse.click_lock
  303.       else
  304.         Mouse.click_unlock
  305.       end
  306.     end
  307.     if @last_mouse_y == nil
  308.       @last_mouse_y = mouse_y
  309.     end
  310.     check_pos = (@last_mouse_y - mouse_y).abs
  311.     if check_pos > 10
  312.       $game_system.se_play($data_system.cursor_se)
  313.       place = 10 ** (@digits_max - 1 - @index)
  314.       n = @number / place % 10
  315.       @number -= n * place
  316.       n = (n + 1) % 10 if mouse_y < @last_mouse_y
  317.       n = (n + 9) % 10 if mouse_y > @last_mouse_y
  318.       @number += n * place
  319.       refresh
  320.       @last_mouse_y = mouse_y
  321.     end
  322.   end
  323. end
  324. class Scene_File
  325.   if @self_alias == nil
  326.     alias self_update update
  327.     @self_alias = true
  328.   end
  329.   def update
  330.     mouse_x, mouse_y = Mouse.get_mouse_pos
  331.     Mouse.click_lock
  332.     idx = 0
  333.     for i in @savefile_windows
  334.       top_x = i.x + 16
  335.       top_y = i.y + 16
  336.       bottom_x = top_x + i.width
  337.       bottom_y = top_y + i.height
  338.       if (mouse_x > top_x) and (mouse_y > top_y) and
  339.          (mouse_x < bottom_x) and (mouse_y < bottom_y)
  340.         i.selected = true
  341.         if @file_index != idx
  342.           @file_index = idx
  343.           $game_system.se_play($data_system.cursor_se)
  344.         end            
  345.         Mouse.click_unlock
  346.       else
  347.         i.selected = false
  348.       end
  349.       idx += 1
  350.     end
  351.     self_update
  352.   end
  353. end
  354. class Arrow_Enemy
  355.   if @self_alias == nil
  356.     alias self_update update
  357.     @self_alias = true
  358.   end
  359.   def update
  360.     mouse_x, mouse_y = Mouse.get_mouse_pos
  361.     idx = 0
  362.     for i in $game_troop.enemies do
  363.       if i.exist?
  364.         top_x = i.screen_x - self.ox
  365.         top_y = i.screen_y - self.oy
  366.         bottom_x = top_x + self.src_rect.width
  367.         bottom_y = top_y + self.src_rect.height
  368.         if (mouse_x > top_x - $敌人选框扩大) and (mouse_y > top_y - $敌人选框扩大) and
  369.            (mouse_x < bottom_x + $敌人选框扩大) and (mouse_y < bottom_y + $敌人选框扩大)
  370.           if @index != idx
  371.             $game_system.se_play($data_system.cursor_se)
  372.             @index = idx
  373.           end
  374.         end
  375.       end
  376.       idx += 1
  377.     end
  378.     self_update
  379.   end
  380. end
  381. class Arrow_Actor
  382.   if @self_alias == nil
  383.     alias self_update update
  384.     @self_alias = true
  385.   end
  386.   def update
  387.     mouse_x, mouse_y = Mouse.get_mouse_pos
  388.     idx = 0
  389.     for i in $game_party.actors do
  390.       if i.exist?
  391.         top_x = i.screen_x - self.ox
  392.         top_y = i.screen_y - self.oy
  393.         bottom_x = top_x + self.src_rect.width
  394.         bottom_y = top_y + self.src_rect.height
  395.         if (mouse_x > top_x - $角色选框扩大) and (mouse_y > top_y - $角色选框扩大) and
  396.            (mouse_x < bottom_x + $角色选框扩大) and (mouse_y < bottom_y + $角色选框扩大)
  397.           if @index != idx
  398.             $game_system.se_play($data_system.cursor_se)
  399.             @index = idx
  400.           end
  401.         end
  402.       end
  403.       idx += 1
  404.     end
  405.     self_update
  406.   end
  407. end
  408. class Game_Player
  409.   if @self_alias == nil
  410.     alias self_update update
  411.     @self_alias = true
  412.   end
  413.   def update
  414.     mouse_x, mouse_y = Mouse.get_mouse_pos
  415.     if @last_move_x == nil
  416.       @last_move_x = false
  417.     end
  418.     if Mouse.press?(Mouse::LEFT)
  419.       last_moving = moving?
  420.       last_direction = @direction
  421.       unless moving? or $game_system.map_interpreter.running? or
  422.              @move_route_forcing or $game_temp.message_window_showing
  423.         last_x = @x
  424.         if @last_move_x
  425.           @last_move_x = false
  426.         elsif mouse_x > screen_x + 16
  427.           move_right
  428.         elsif mouse_x < screen_x - 16
  429.           move_left
  430.         end
  431.         last_y = @y
  432.         if last_x != @x
  433.           @last_move_x = true
  434.         elsif mouse_y > screen_y
  435.           move_down
  436.         elsif mouse_y < screen_y - 32
  437.           move_up
  438.         end
  439.         if last_y != @y
  440.           @last_move_x = false
  441.         elsif not @last_move_x
  442.           case last_direction
  443.           when 2
  444.             turn_down
  445.           when 4
  446.             turn_left
  447.           when 6
  448.             turn_right
  449.           when 8
  450.             turn_up
  451.           end
  452.         end
  453.       end
  454.     end
  455.   self_update
  456.   end
  457. end
  458. Mouse.init
  459. END { Mouse.exit }

  460. #==============================================================================
  461. # 本脚本来自[url]www.66RPG.com[/url],使用和转载请保留此信息
  462. #==============================================================================
复制代码
鼠标响应事件脚本:

  1. #==============================================================================
  2. # ■ Sprite_Character                                          
  3. #------------------------------------------------------------------------------
  4. # check the Mouse's events and lighter,start.
  5. #==============================================================================
  6. class Sprite_Character < RPG::Sprite
  7.   alias oldupdate update
  8.   def update
  9.    oldupdate
  10.    mx,my = Mouse.get_mouse_pos
  11.    lx = self.x - self.ox
  12.    rx = lx + self.bitmap.width/4
  13.    ty = self.y - self.oy
  14.    by = ty + self.bitmap.height/4
  15.    if mx < lx or mx > rx or my < ty or my > by or
  16.      self.bitmap.get_pixel(mx-lx,my-ty).alpha == 0
  17.      return
  18.    end
  19.    unless @character==$game_player
  20.    [email protected](" ")
  21.    path_mouse=path[0]
  22.    path_se=path[1]
  23.    if @character.name.include?("play_se=")
  24.      path_se=path_se.split("")
  25.      for i in 0..7
  26.        path_se.shift
  27.      end
  28.     path_x=path_mouse.split("")
  29.     for i in 0..5
  30.       path_x.shift
  31.     end
  32.     Audio.se_play("Audio/SE/"+path_se.to_s) if Mouse.name != path_x.to_s and $se_ctrl==1
  33.     $se_ctrl=0
  34.    end
  35.    if @character.name.include?("mouse=")
  36.     path_mouse=path_mouse.split("")
  37.     Mouse.exit
  38.     for i in 0..5
  39.       path_mouse.shift
  40.     end
  41.     Mouse.init(path_mouse.to_s)
  42.     end
  43.   end
  44.   return if $game_temp.transition_processing or $game_temp.gameover or $game_temp.message_window_showing or $game_system.map_interpreter.running?
  45.   if Mouse.trigger?(Mouse::LEFT) and @character != $game_player and @character.trigger != 4
  46.     unless @character.starting
  47.       @character.start
  48.       return
  49.     end
  50.   end
  51.   end
  52. end
  53. class Game_Event
  54.   attr_accessor    :name
  55.   def initialize(map_id, event)
  56.     super()
  57.     @map_id = map_id
  58.     @event = event
  59.     @id = @event.id
  60.     @name = @event.name
  61.     @erased = false
  62.     @starting = false
  63.     @through = true
  64.     moveto(@event.x, @event.y)
  65.     refresh
  66.   end
  67. end
  68. class Scene_Map
  69.   alias oldupdate update
  70.   alias mainold main
  71.   def main
  72.     $se_ctrl=0
  73.     mainold
  74.   end
  75.   def update
  76.     if Mouse.name !="001-Weapon01.png"
  77.     Mouse.exit
  78.     Mouse.init
  79.     else
  80.     $se_ctrl=1
  81.     end
  82.     oldupdate
  83.   end
  84. end
  85. #-------------------------------------------------------------------------------
  86. #end
  87. #-------------------------------------------------------------------------------
复制代码

评分

参与人数 2星屑 +15 梦石 +2 收起 理由
飞3a + 15 感谢提供
eve592370698 + 2 另外几个相似的帖子,答案通用,给您补上。.

查看全部评分

帐号并非本人使用!
帐号并非本人使用!
帐号并非本人使用!
帐号并非本人使用!
帐号并非本人使用!
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-27 07:25

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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