查看: 2384|回复: 7

[已经解决] 求教:关于怎么获取当前活动选项的坐标范围……等2问……

[复制链接]
梦石
0
星屑
50
在线时间
7 小时
注册时间
2013-5-2
回帖
5
发表于 2013-5-6 14:15:50 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 Sion 于 2013-5-25 17:53 编辑

小白表示有了点C++基础,就想去到处改默认脚本……
然后发现自己实在DT,于是下了@Sion 大大的VA鼠标脚本来学习&入门,然后就一堆问题来了……

背景:1张图就够了……

adf.jpg




问题1:在大地图上点击右键后,会发现背景那块会留着个鼠标……怎么去掉啊?
个人觉得关键的代码:
[pre lang="ruby" line="1"]  #--------------------------------------------------------------------------
  # ● 鼠标指针精灵 ——> 来自Sion大大的部分代码
  #--------------------------------------------------------------------------
  def creat_mouse_sprite
    @mouse_sprite = Sprite.new
    if File.exist?('Graphics/System/Cursor.png')
      @mouse_sprite.bitmap = Bitmap.new('Graphics/System/Cursor')
    else

      if $no_arrowpic_warn
        msgbox('未找到文件:Graphics\System\Cursor.png

“鼠标指针”将使用游戏自带图片

该提示可以在脚本内关闭')
      end

      @mouse_sprite.bitmap = Bitmap.new(24, 24)
      @mouse_sprite.bitmap.blt(0, 0, Cache.system('Iconset'),
        Rect.new(5 * 24, 24 * 24, 24, 24))
    end
    @mouse_sprite.z = 9999
    Show_Cursor.call(0)
  end
  #--------------------------------------------------------------------------
  # ● 更新 ——> 来自Sion大大的部分代码
  #--------------------------------------------------------------------------
  def update
    @mouse_sprite.x, @mouse_sprite.y = get_mouse_pos
    left_state  = Get_Key_State.call(0x01)
    left_state[7] == 1 ? @left_state +=1 : @left_state = 0
    right_state = Get_Key_State.call(0x02)
    right_state[7] == 1 ? @right_state +=1 : @right_state = 0
    update_double_click
    @left_state == 1 ? @ck_count = 0 : @ck_count += 1
  end[/pre]


问题2:鼠标点击左键的时候无论在不在选项上都会相当于按了空格键

所以就想能否获取当前的活动选项的坐标范围?以判断鼠标是否真的点中了选项

注意是活动选项,也就是按下空格,发生响应的那个选项
比如图片现在的状态是进入了【技能】选项,准备选择人物选项,那么活动的选项则是艾里克的那个人物选择框,主要问题就是:获取活动窗口,的当前选项,的坐标范围……


PS:由于是想自己来改&学习,所以发了个主帖,大大莫怪

梦石
0
星屑
266
在线时间
2355 小时
注册时间
2009-3-13
回帖
2257

贵宾

发表于 2013-5-6 18:39:44 | 显示全部楼层
本帖最后由 Sion 于 2013-5-6 18:43 编辑

后面的背景是截图,需要在系统截图的时候隐藏鼠标精灵,然后再让它显示出来。
下面是补丁
  1. class << Mouse
  2. attr_reader :mouse_sprite
  3. end

  4. class << SceneManager
  5.   unless self.method_defined?(:snapshot_for_background_2013_5_6)
  6.     alias_method :snapshot_for_background_2013_5_6, :snapshot_for_background
  7.   end
  8.   def snapshot_for_background
  9.     Mouse.mouse_sprite.visible = false
  10.     snapshot_for_background_2013_5_6
  11.     Mouse.mouse_sprite.visible = true
  12.   end
  13. end
复制代码
判断范围的代码,因为偷懒,借用了系统原来的光标系统,修改起来比较困难。
回复

使用道具 举报

梦石
0
星屑
50
在线时间
7 小时
注册时间
2013-5-2
回帖
5
 楼主| 发表于 2013-5-6 18:47:02 | 显示全部楼层
本帖最后由 sssWorld 于 2013-5-6 18:48 编辑
Sion 发表于 2013-5-6 18:39
后面的背景是截图,需要在系统截图的时候隐藏鼠标精灵,然后再让它显示出来。
下面是补丁判断范围的代码, ...


也就是说用了这个补丁后,即使以后设置了存档截图之类的功能,也能把鼠标隐藏了?

关于范围如果是初始的脚本集合的话,应该怎样获取呢?
回复

使用道具 举报

梦石
0
星屑
266
在线时间
2355 小时
注册时间
2009-3-13
回帖
2257

贵宾

发表于 2013-5-6 19:20:58 | 显示全部楼层
本帖最后由 Sion 于 2013-5-6 19:37 编辑
sssWorld 发表于 2013-5-6 18:47
也就是说用了这个补丁后,即使以后设置了存档截图之类的功能,也能把鼠标隐藏了?

关于范围如果是初始的 ...


1,需要在对应的地方隐藏鼠标精灵。截图存档之类的应该不是使用 SceneManager 里的那个截图

2,初始脚本是指新建工程的默认脚本?

通过调用API来获取鼠标坐标
  1. module UrMouse

  2.   Get_Cursor_Pos    = Win32API.new('user32', 'GetCursorPos', 'p', 'i')
  3.   Screen_To_Client  = Win32API.new('user32', 'ScreenToClient', 'ip', 'i')
  4.   Get_Active_Window = Win32API.new('user32', 'GetActiveWindow', nil, 'l')
  5.   HWnd                = Get_Active_Window.call

  6.   module_function

  7.   def get_pos
  8.     arg = [0, 0].pack('ll')
  9.     Get_Cursor_Pos.call(arg)
  10.     Screen_To_Client.call(HWnd, arg)
  11.     arg.unpack('ll')
  12.   end
  13. end
复制代码
使用
  1. x, y = UrMouse.get_pos
复制代码
来获取鼠标当前坐标,然后就简单的计算一下就能判定鼠标是不是在指定的范围。
回复

使用道具 举报

梦石
0
星屑
50
在线时间
7 小时
注册时间
2013-5-2
回帖
5
 楼主| 发表于 2013-5-6 19:41:58 | 显示全部楼层
本帖最后由 sssWorld 于 2013-5-6 19:43 编辑
Sion 发表于 2013-5-6 19:20
1,需要在对应的地方隐藏鼠标精灵。截图存档之类的应该不是使用 SceneManager 里的那个截图

2,初始脚本 ...


Mouse这段我看懂了,因为之前学过VC++的说……

对,就是指那个RMVA自动生成的默认脚本,如果我没理解错的话,【菜单】也是通过 建立一个新window对象 来实现的?那么这样的话应该就可以通过window类的方法获取选项的坐标范围了吧。

另:RMVA应该也封装了一部分基类吧,大大介绍的ruby-doc网站好像只有Ruby的基本语法和数据结构(类似于C++与VC++的区别),有介绍RMVA自己封装的类的网站吗?

顺便吐一句:新人不能发链接……是防广告么……
回复

使用道具 举报

梦石
0
星屑
266
在线时间
2355 小时
注册时间
2009-3-13
回帖
2257

贵宾

发表于 2013-5-6 19:59:42 | 显示全部楼层
本帖最后由 Sion 于 2013-5-6 20:03 编辑
sssWorld 发表于 2013-5-6 19:41
Mouse这段我看懂了,因为之前学过VC++的说……

对,就是指那个RMVA自动生成的默认脚本,如果我没理解错 ...


知道个英文站: http://rgss3doc.tk//en/index.html
不完全汉化的F1档:http://rpg.blue/home.php?mod=spa ... o=blog&id=11217
RGSS3基类源码听说是用C编写的,反正我是没找到- -b

菜单的话,看看默认脚本 + F1帮助档应该能看懂的。主要是 Window_Selectable 和它的父类
回复

使用道具 举报

梦石
0
星屑
50
在线时间
7 小时
注册时间
2013-5-2
回帖
5
 楼主| 发表于 2013-5-6 20:03:36 | 显示全部楼层
Sion 发表于 2013-5-6 19:59
知道个英文站: http://rgss3doc.tk//en/index.html
不完全汉化的F1档:http://rpg.blue/home.php?mo ...

非常感谢大大的解答和分享!{:2_275:}
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部