Project1

标题: 图片相应鼠标问题 [打印本页]

作者: fuyanbin    时间: 2008-9-30 19:43
标题: 图片相应鼠标问题
鼠标相应图片的问题,请各位帮忙解答~

首先是我用的鼠标系统:
http://rpg.blue/viewthread.php?t ... 9%2D30+11%3A25%3A57

其次是我用的图片相应鼠标脚本:
  1. class Game_Picture

  2. def name=(str)
  3.    @name = str
  4. end

  5. end

  6. class Sprite_Picture

  7. alias update_old update
  8. def update
  9.    update_old
  10.    return if @picture_name == "" or @picture_name[/cmd/].nil?
  11.    mx,my = Mouse.get_mouse_pos
  12.    lx = self.x - self.ox
  13.    rx = lx + self.bitmap.width
  14.    ty = self.y - self.oy
  15.    by = ty + self.bitmap.height
  16.    if mx < lx or mx > rx or my < ty or my > by or
  17.      self.bitmap.get_pixel(mx-lx,my-ty).alpha == 0
  18.      @picture.name = @picture.name.split(/_/)[0]+"_"[email protected](/_/)[1]
  19.      return
  20.    end
  21.    if @picture.name.split(/_/)[2].nil?
  22.      @picture.name = @picture.name + "_02"
  23.    end
  24.    if Input.trigger?(13)
  25.      @picture.name.split(/_/)[0].sub(/cmd([0-9]+)/,"")
  26.      $game_temp.common_event_id = $1.to_i
  27.    end
  28. end

  29. end
复制代码



我把 Graphics\pictures 下的一张图片名字改成 cmd20_测试.bmp 游戏里显示了这张图片
公共事件里设置 20号事件为消去这张图 显示文本(也就是做个测试用,看能成功不)
但是当我运行游戏-新的开始后出现错误对话框:

告诉我说没定义 get_mouse_pos 这个问题该怎么解决?

此外我看到有的讨论贴里说 如果你要触发20号公共事件 那么$game_temp.common_event_id = $1.to_i 就要改成$game_temp.common_event_id = 20  是不是这样?那我要是有很多个事件要触发 难道就在下面接着写$game_temp.common_event_id = 21 $game_temp.common_event_id = 22? [LINE]1,#dddddd[/LINE]版务信息:本贴由楼主自主结贴~
作者: 分子轨道理论    时间: 2008-9-30 19:51
Mouse.get_mouse_pos
作用为取得鼠标位置,你用的哪个版本没有定义这个方法  = =

另外没必要改,看这句,已经帮你写好了 = =
@picture.name.split(/_/)[0].sub(/cmd([0-9]+)/,"")
作者: fuyanbin    时间: 2008-9-30 20:02
谢谢楼上的 我想问下 去哪里能找到定义了Mouse.get_mouse_pos方法的脚本呢……我翻了好几遍了 没有发现……

作者: dbshy    时间: 2008-9-30 20:16
以下引用fuyanbin于2008-9-30 12:02:26的发言:

谢谢楼上的 我想问下 去哪里能找到定义了Mouse.get_mouse_pos方法的脚本呢……我翻了好几遍了 没有发现……

你没懂我的意思

找到mx,my = Mouse.get_mouse_pos
改为 xy = Mouse.pixels
   mx = xy[0]
   my = xy[1]

试一下,我也没认真看脚本 = =
作者: fuyanbin    时间: 2008-10-1 18:41
以下引用dbshy于2008-9-30 12:16:20的发言:

你没懂我的意思

找到mx,my = Mouse.get_mouse_pos
改为 xy = Mouse.pixels
  mx = xy[0]
  my = xy[1]

试一下,我也没认真看脚本 = =


确实是不报错了,但是点击图片依旧没反映……到底该怎么弄呢……
作者: dbshy    时间: 2008-10-1 19:11
找到 Input.trigger?(13) 改为 Input.trigger?(Input::C)

具体找到INPUT模块,去看,我现在没时间,要出去办事
作者: 灼眼的夏娜    时间: 2008-10-2 02:27
记得 鼠标相应图片 那脚本附带一个工程的,里面有鼠标脚本,, lz可以下载来试试= =


to ls:
  13和Input::C 一样的= =
作者: dbshy    时间: 2008-10-2 05:08
以下引用灼眼的夏娜于2008-10-1 18:27:55的发言:
to ls:
13和Input::C 一样的= =

ASCII?
咱没试
作者: fuyanbin    时间: 2008-10-3 06:39
还是不好使啊{/dk} 有没有能帮解决的啊 没有只能放弃了{/dk}
作者: dbshy    时间: 2008-10-3 18:50
好吧,你把工程发上来,我试试 = =
作者: fuyanbin    时间: 2008-10-3 21:54
先感谢你热心的帮助
然后上工程 - -
http://rpg.blue/upload_program/goods/鼠标_103470583.rar

你搞个图片叫 cmd20_测试 就行了 你是专家 肯定比我明白 还是你自己看吧……
作者: dbshy    时间: 2008-10-4 00:07
先把下面脚本替换原来的鼠标响应图片脚本

我先声明这只是个简单实现功能的脚本 = =

  1. $lock = false
  2. class Game_Picture

  3. def name=(str)
  4.    @name = str
  5. end

  6. end

  7. class Sprite_Picture

  8. alias update_old update
  9. def update
  10.    update_old
  11.    return if @picture_name == "" or @picture_name[/cmd/].nil?
  12.     xy = Mouse.pixels
  13.     mx = xy[0]
  14.     my = xy[1]
  15.    lx = self.x - self.ox
  16.    rx = lx + self.bitmap.width
  17.    ty = self.y - self.oy
  18.    by = ty + self.bitmap.height
  19.   
  20.    if mx > lx and mx < rx and my > ty and my < by then
  21.        $lock = true
  22.        @picture.name.split(/_/)[0] =~ /cmd([0-9]+)/
  23.        s =  $1

  24.       if Mouse.click?(1) then
  25.         $game_temp.common_event_id = s.to_i
  26.        else  $lock = false
  27.       end
  28.    end

  29. end

  30. end
复制代码


class Scene_Map < Scene_Base
  alias wor_scemap_ini_mouse initialize
  alias wor_scemap_upd_mouse update
  def initialize
    @last_click = [nil, nil]
    wor_scemap_ini_mouse
  end
  
  def update
    wor_scemap_upd_mouse
    mouse_xy = Mouse.map_pos
    if Mouse.click?(1) and !mouse_xy.nil? and !$game_message.visible and
      !$game_map.interpreter.running?
      $game_player.turn_toward_pos(mouse_xy[0], mouse_xy[1])
      if $game_player.close?(mouse_xy[0],mouse_xy[1]) and
        $game_player.check_action_event
        $game_player.clear_path
        return
      end
      if $game_map.passable?(mouse_xy[0], mouse_xy[1])
        $game_player.find_path(mouse_xy[0], mouse_xy[1])
      end
      @last_click = mouse_xy
    end
    if Mouse.click?(3) and !mouse_xy.nil? and !$game_message.visible and
      !$game_map.interpreter.running?
      $game_player.clear_path
      $game_player.turn_toward_pos(mouse_xy[0], mouse_xy[1])
    end
  end
end

找到if Mouse.click?(1) and !mouse_xy.nil? and !$game_message.visible and
      !$game_map.interpreter.running?
改为if Mouse.click?(1) and !mouse_xy.nil? and !$game_message.visible and
      !$game_map.interpreter.running? and !$lock

这是为了解决点击图片,人物回寻路的问题

忘记讲命名规则cmd1_1
cmd+公共事件编号_+图片名字 [LINE]1,#dddddd[/LINE]系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
作者: fuyanbin    时间: 2008-10-4 03:33
太感谢了,按照你的方法已经成功了!谢谢!




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1