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

Project1

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

[已经解决] 有关鼠标、键盘的一个奇怪问题

[复制链接]

Lv3.寻梦者

梦石
0
星屑
2821
在线时间
585 小时
注册时间
2022-7-13
帖子
89
跳转到指定楼层
1
发表于 2023-1-6 12:45:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 我为鱼肉 于 2023-1-6 16:46 编辑

首先我在类中定义了一个大概这样的方法
RUBY 代码复制
  1. def check
  2.   return unless @active
  3.   if Keyboard.trigger?(1)
  4.     p 1
  5.   end
  6. end

@active是指光标坐标是否在某个指定的范围内。

这样一来,在@active状态下,点击鼠标左键会 p 1;
奇怪的是,在非@active状态下,点击鼠标左键虽然没有 p 1,但当鼠标重新移动到指定范围内(@active状态下)时,即便没有点击鼠标左键依然会 p 1

猫大和夏娜的全键盘均会出现上述问题。但如果我把判断改为Input.trigger?(键)时则不会出现类似问题。


经过尝试改成这样即可解决。
RUBY 代码复制
  1. def check
  2.   if Keyboard.trigger?(1)
  3.     return unless @active
  4.     p 1
  5.   end
  6. end

Lv5.捕梦者

梦石
24
星屑
7022
在线时间
247 小时
注册时间
2020-12-4
帖子
306

极短24获奖极短23获奖极短22获奖

2
发表于 2023-1-6 21:25:16 | 只看该作者
我用全键盘的脚本时也遇到过这样的情况,
当按下的按键没有起作用的情况下,按键就会默认一直被按着,
等到有反应的场景时,按键就自动起作用了

关于【按键】的原理
https://rpg.blue/forum.php?mod=v ... amp;fromuid=2717817
(出处: Project1)

换了个脚本之后就解决了,不过还是没有研究出其原理

点评

网上有很多关于0x8000的内容。认为GetAsyncKeyState.call(key)这么写是不对的,GetAsyncKeyState.call(key) & 0x8000  发表于 2023-1-6 23:04
确实GetAsyncKeyState.call(key) != 0 改为GetAsyncKeyState.call(key) & 0x8000 == 0x8000解决了  发表于 2023-1-6 23:00

评分

参与人数 1星屑 +50 收起 理由
RyanBern + 50 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

遠航の猫咪

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

开拓者

3
发表于 2023-1-7 01:36:57 | 只看该作者
我的也有这个问题吗?可否提供一下具体的上下文
我记得我发布的这个全键盘脚本是做了&0800的处理的……

  1.   #--------------------------------------------------------------------------
  2.   # ● 更新键盘输入,该方法每帧调用1次
  3.   #--------------------------------------------------------------------------
  4.   def self.update
  5.     @keychar = nil
  6.     Flags.each_key do |k|
  7.       GetAsyncKeyState.call(k) & 32768 != 0 ? Flags[k] += 1 : Flags.delete(k)
  8.     end
  9.   end
  10.   #--------------------------------------------------------------------------
  11.   # ● 判断对应的键是否现在被按下
  12.   #--------------------------------------------------------------------------
  13.   def self.press?(key)
  14.     key = get_key(key) unless key.is_a?(Numeric) or key.is_a?(Array)
  15.     return key.any?{|k| press?(k)} if key.is_a?(Array)
  16.     GetAsyncKeyState.call(key) & 32768 != 0 ? (Flags[key] ||= 0; true) : false
  17.   end
复制代码

点评

看到了,确实那个版本里面没有写&0800的处理,改掉这里应该就可以了  发表于 2023-1-7 02:38
https://rpg.blue/thread-405036-1-1.html 在这里找到的。好早之前了  发表于 2023-1-7 01:49
SailCat (小猫子·要开心一点) 共上站 24 次,发表过 11 篇文章 上 次 在: [2006年01月28日11:41:18 星期六] 从 [162.105.120.91] 到本站一游。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-29 14:24

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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