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

Project1

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

想要一个鼠标操作的脚本

 关闭 [复制链接]
头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2007-8-18
帖子
458
跳转到指定楼层
1
发表于 2009-1-31 06:09:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽

Lv1.梦旅人

辉瑞中国首席研究员<

梦石
0
星屑
50
在线时间
142 小时
注册时间
2008-1-18
帖子
2129
2
发表于 2009-2-1 06:37:24 | 只看该作者
  1. class Game_Map
  2.   def check_event_custom_start(mouse_x, mouse_y)
  3.     for event in $game_map.events.values #循环所有事件检查
  4.       #事件角色图片宽度、高度
  5.       event_width = RPG::Cache.character(event.character_name,event.character_hue).width/4
  6.       event_height = RPG::Cache.character(event.character_name,event.character_hue).height/4
  7.       #判断是否鼠标在事件上
  8.       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
  9.        event.start #开启事件
  10.         end
  11.       end
  12.     end
  13.   end

  14. class Mouse  
  15. LEFT = 0x01
  16. RIGHT = 0x02

  17. def init(sprite = nil)
  18.    $ShowCursor = Win32API.new("user32", "ShowCursor", 'i', 'l')
  19.    $GetCursorPos = Win32API.new("user32", "GetCursorPos", 'p', 'i')
  20.    $ScreenToClient = Win32API.new("user32", "ScreenToClient", 'ip', 'i')
  21.    $GetActiveWindow = Win32API.new("user32", "GetActiveWindow", nil, 'l')
  22.    $Window_HWND = $GetActiveWindow.call
  23.    $GetKeyState = Win32API.new("user32", "GetKeyState", 'i', 'i')
  24.    $ShowCursor.call(0)
  25.    
  26.    @show_cursor = false
  27.    
  28.    @mouse_sprite = Sprite.new
  29.    @mouse_sprite.z = 99999
  30.    @mouse_sprite.bitmap = Bitmap.new('Graphics/Icons/001-Weapon01.png')

  31.    @left_press = false
  32.    @right_press = false
  33.    @left_trigger = false
  34.    @right_trigger = false
  35.    @left_repeat = false
  36.    @right_repeat = false
  37.    @click_lock = false
  38.    
  39.    update
  40. end
  41. def self.exit
  42.    @mouse_sprite.bitmap.dispose
  43.    @mouse_sprite.dispose
  44.    @show_cursor = true
  45.    $ShowCursor.call(1)
  46. end
  47. def self.mouse_debug
  48.    return @mouse_debug.bitmap
  49. end
  50. def self.update
  51.    left_down = $GetKeyState.call(0x01)
  52.    right_down = $GetKeyState.call(0x02)
  53.    if Graphics.frame_count * 3 / Graphics.frame_rate != @total_sec
  54.      @total_sec = Graphics.frame_count * 3 / Graphics.frame_rate
  55.      @a = !@a
  56.    end
  57.    if $scene.is_a?(Scene_Map) == false
  58.      $mouse_icon_id = 0
  59.    end
  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. #这是INPUT模块
  153. module Input
  154. if @self_update == nil
  155.    @self_update = method('update')
  156.    @self_press = method('press?')
  157.    @self_trigger = method('trigger?')
  158.    @self_repeat = method('repeat?')
  159. end
  160. def self.update
  161.    @self_update.call
  162.    Mouse.update
  163. end
  164. def self.press?(key_code)
  165.    if @self_press.call(key_code)
  166.      return true
  167.    end
  168.    if key_code == C
  169.      return Mouse.press?(Mouse::LEFT)
  170.    elsif key_code == B
  171.      return Mouse.press?(Mouse::RIGHT)
  172.    else
  173.      return @self_press.call(key_code)
  174.    end
  175. end
  176. def self.trigger?(key_code)
  177.    if @self_trigger.call(key_code)
  178.      return true
  179.    end
  180.    if key_code == C
  181.      return Mouse.trigger?(Mouse::LEFT)
  182.    elsif key_code == B
  183.      return Mouse.trigger?(Mouse::RIGHT)
  184.    else
  185.      return @self_trigger.call(key_code)
  186.    end
  187. end
  188. def self.repeat?(key_code)
  189.    if @self_repeat.call(key_code)
  190.      return true
  191.    end
  192.    if key_code == C
  193.      return Mouse.repeat?(Mouse::LEFT)
  194.    elsif key_code == B
  195.      return Mouse.repeat?(Mouse::RIGHT)
  196.    else
  197.      return @self_repeat.call(key_code)
  198.    end
  199. end
  200. end

  201. Mouse.init
  202. class Game_Player < Game_Character
  203. alias old_update update
  204.     def update
  205.       old_update
  206.       if Mouse.trigger?(Mouse::LEFT) then
  207.       mouse_x, mouse_y = Mouse.get_mouse_pos
  208.       $game_map.check_event_custom_start(mouse_x, mouse_y)
  209.     end
  210.     end
  211. end
复制代码


当某开关打开时,鼠标操作脚本起作用,开关关闭时就没用了
这个没实现,等高手前辈{/ll}{/ll}
水平越来越废柴 - -bb
来6r就是等某位仁兄的巨坑

褴褛着身行无端,囊中羞涩空心酸。
平生几无得意事,倒塔泡面宅寝室。
惟羡隔壁高帅富,雨露春风月夜声。
青丝无处觅其踪,只有硬盘苍井空。
莫云男儿空悲愁,鸿鹄岂不天际游。
坐断天下执鹿首,千百金帛万兜鍪。
夜深忽梦某年月,再见女神欲语迟。
吊丝终有逆袭日,木耳再无回粉时。
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2009-1-31
帖子
29
3
发表于 2009-2-1 07:43:58 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
21 小时
注册时间
2007-7-3
帖子
573
4
发表于 2009-2-1 17:03:01 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-10-1
帖子
58
5
发表于 2009-2-1 17:05:41 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
21 小时
注册时间
2007-7-3
帖子
573
6
发表于 2009-2-1 17:20:34 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-10-1
帖子
58
7
发表于 2009-2-1 17:27:35 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv3.寻梦者

孤独守望

梦石
0
星屑
3137
在线时间
1535 小时
注册时间
2006-10-16
帖子
4321

开拓者贵宾

8
发表于 2009-2-1 17:34:37 | 只看该作者
dbshy下面全都是self定义方法还用class= =既然决心class到底Init又不加self= =
另外狠狠的掐把visible拼成visivle的那位
修改如下
22行改成
def self.init(sprite = nil)
58行改成
   @mouse_sprite.visible = $need_mouse
菩提本非树,明镜本非台。回头自望路漫漫。不求姻缘,但求再见。
本来无一物,何处惹尘埃。风打浪吹雨不来。荒庭遍野,扶摇难接。
不知道多久更新一次的博客
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
21 小时
注册时间
2007-7-3
帖子
573
9
发表于 2009-2-1 17:35:42 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv3.寻梦者

孤独守望

梦石
0
星屑
3137
在线时间
1535 小时
注册时间
2006-10-16
帖子
4321

开拓者贵宾

10
发表于 2009-2-1 17:37:41 | 只看该作者
以下引用goahead于2009-2-1 9:35:42的发言:

class mouse改成moudle mouse
def ini 改成def self.ini

class可以不改,反正class也可以定义公有方法,并非一定要module
菩提本非树,明镜本非台。回头自望路漫漫。不求姻缘,但求再见。
本来无一物,何处惹尘埃。风打浪吹雨不来。荒庭遍野,扶摇难接。
不知道多久更新一次的博客
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-18 15:52

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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