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

Project1

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

[通用发布] 全键盘输入数值 1.1

[复制链接]

Lv6.析梦学徒

Fuzzy Ginkgo
Taciturn Knight

梦石
0
星屑
60819
在线时间
1934 小时
注册时间
2010-6-26
帖子
1605

烫烫烫开拓者

跳转到指定楼层
1
发表于 2011-8-17 16:34:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 orzfly 于 2011-8-17 17:42 编辑

这个纯粹是方便输入数值用的,现在可以直接用数字键和退格键输入数字了。XP/VX通用。只追加定义了 Window_InputNumber (XP) / Window_InputNumber (VX) 的 update。

这个就不上截图了,关键在于输入的过程,上截图没意思。
  1. #==============================================================================
  2. # ■ 全键盘输入数值 1.1
  3. #   http://orzFly.com/RM/FullKeyboardInputNumber
  4. #------------------------------------------------------------------------------
  5. # 为『输入数值的处理』增加全键盘的支持。
  6. #------------------------------------------------------------------------------
  7. # - 1.1 by orzFly [[email protected]]
  8. #   * 修正 bug:屏蔽小键盘光标移动功能。
  9. #
  10. # - 1.0 by orzFly [[email protected]]
  11. #   * 首个版本
  12. #==============================================================================
  13. module OrzFly
  14.   RM = Game_Temp.method_defined?(:background_bitmap) unless const_defined?(:RM)
  15.   module FullKeyInputNumber
  16.     Keys = {
  17.       # 主键盘区数字 0~9
  18.       0x30 => 0, 0x31 => 1, 0x32 => 2, 0x33 => 3, 0x34 => 4,
  19.       0x35 => 5, 0x36 => 6, 0x37 => 7, 0x38 => 8, 0x39 => 9,
  20.       # 小键盘区数字 Numpad 0, 1, 3, 5, 7, 9
  21.       0x60 => 0, 0x61 => 1, 0x63 => 3, 0x65 => 5, 0x67 => 7, 0x69 => 9,
  22.       #              Numpad 2, 4, 6, 8 较特殊,单独处理
  23.       # 退格 Backspace
  24.       0x08 => -1,
  25.       # 删除 Delete
  26.       0x2E => -2
  27.     }
  28.     GetKeyState = Win32API.new(
  29.       "user32", "GetAsyncKeyState", ['I'], 'I'
  30.     )
  31.   end
  32. end

  33. #==============================================================================
  34. # ■ Window_InputNumber (XP) / Window_InputNumber (VX) 追加定义
  35. #------------------------------------------------------------------------------
  36. #  信息窗口内部使用、输入数值的窗口。
  37. #==============================================================================
  38. (OrzFly::RM ? Window_NumberInput : Window_InputNumber).class_eval {
  39.   def update
  40.     super
  41.     if active
  42.       catch(:loop) {
  43.         OrzFly::FullKeyInputNumber::Keys.keys.each { |key|
  44.           if OrzFly::FullKeyInputNumber::GetKeyState.call(key) & 1 != 0
  45.             OrzFly::RM ? Sound.play_cursor                          \
  46.                        : $game_system.se_play($data_system.cursor_se)
  47.             process_key(OrzFly::FullKeyInputNumber::Keys[key])
  48.             throw(:loop)
  49.           end
  50.         }
  51.       }
  52.       if Input.repeat?(Input::UP)or Input.repeat?(Input::DOWN)
  53.         if OrzFly::FullKeyInputNumber::GetKeyState.call(0x68) != 0
  54.           process_key(8)
  55.         elsif OrzFly::FullKeyInputNumber::GetKeyState.call(0x62) != 0
  56.           process_key(2)
  57.         else
  58.           OrzFly::RM ? Sound.play_cursor                          \
  59.                      : $game_system.se_play($data_system.cursor_se)
  60.           place = 10 ** (@digits_max - 1 - @index)
  61.           n = @number / place % 10
  62.           @number -= n * place
  63.           n = (n + 1) % 10 if Input.repeat?(Input::UP)
  64.           n = (n + 9) % 10 if Input.repeat?(Input::DOWN)
  65.           @number += n * place
  66.           refresh
  67.         end
  68.       end
  69.       if Input.repeat?(Input::RIGHT)
  70.         if OrzFly::FullKeyInputNumber::GetKeyState.call(0x66) != 0
  71.           process_key(6)
  72.         else
  73.           OrzFly::RM ? Sound.play_cursor                          \
  74.                      : $game_system.se_play($data_system.cursor_se)
  75.           if @index < @digits_max - 1 or Input.trigger?(Input::RIGHT)
  76.             @index = (@index + 1) % @digits_max
  77.           end
  78.         end
  79.       end
  80.       if Input.repeat?(Input::LEFT)
  81.         if OrzFly::FullKeyInputNumber::GetKeyState.call(0x64) != 0
  82.           process_key(4)
  83.         else
  84.           OrzFly::RM ? Sound.play_cursor                          \
  85.                      : $game_system.se_play($data_system.cursor_se)
  86.           if @index > 0 or Input.trigger?(Input::LEFT)
  87.             @index = (@index + @digits_max - 1) % @digits_max
  88.           end
  89.         end
  90.       end
  91.       OrzFly::RM ? update_cursor    \
  92.                  : update_cursor_rect
  93.     end
  94.   end
  95.   def process_key(result)
  96.     if result >= 0 and result <= 9
  97.       place = 10 ** (@digits_max - 1 - @index)
  98.       @number = @number - (@number / place % 10) * place \
  99.                         + result * place
  100.       refresh
  101.       if @digits_max >= 2
  102.         @index = (@index + 1) % @digits_max
  103.       end
  104.     elsif result == -1
  105.       if @digits_max >= 2 and @index >= 1
  106.         @index = (@index + @digits_max - 1) % @digits_max
  107.       end
  108.       place = 10 ** (@digits_max - 1 - @index)
  109.       @number = @number -  (@number / place % 10) * place
  110.       refresh
  111.     elsif result == -2
  112.       place = 10 ** (@digits_max - 1 - @index)
  113.       @number = @number -  (@number / place % 10) * place
  114.       refresh
  115.     end
  116.   end
  117. }
复制代码

点评

顶层使用:Bool = self ? :rv : :rx  发表于 2011-8-17 18:29

评分

参与人数 3星屑 +182 收起 理由
张咚咚 + 10 0无法输入,最后一个数字无法删除,不过还是.
黑白界 + 40 作者辛苦了
fux2 + 132 辛苦费

查看全部评分

我的言论只代表我个人的观点,不代表雇主及/或任何第三方的立场。
Opinions expressed are solely my own and do not express the views or opinions of my employer and/or any third parties.
捐赠 | GitHub

Lv2.观梦者

(?????)

梦石
0
星屑
730
在线时间
1327 小时
注册时间
2011-7-18
帖子
3184

贵宾

2
发表于 2011-8-17 16:45:36 | 只看该作者
本帖最后由 各种压力的猫君 于 2011-8-17 16:49 编辑

好人君~

纯支持~拿走用了

BUG:没有屏蔽小键盘2、4、6、8的光标移动功能……

点评

1.1:修正 bug:屏蔽小键盘光标移动功能。  发表于 2011-8-17 17:46
回复 支持 反对

使用道具 举报

Lv2.观梦者

虚構歪曲

梦石
0
星屑
364
在线时间
1198 小时
注册时间
2010-12-18
帖子
3928

贵宾

3
发表于 2011-8-17 17:35:21 | 只看该作者
这个区分版本的方法依旧不够严谨……

点评

或许 RGSS2 中的 Tilemap.passages 更好一点。因为 RGSS 中完全没有必要写出来这个。  发表于 2011-8-17 17:56
比如判断 Graphics.resize_screen 是否存在……  发表于 2011-8-17 17:55
通过对RGSS2新增的method进行method_defined?判定呢?不过似乎也可以自己补充……  发表于 2011-8-17 17:53
那么该怎么办呢?  发表于 2011-8-17 17:41
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9737
在线时间
3227 小时
注册时间
2011-3-24
帖子
739

开拓者

4
发表于 2011-8-18 18:41:29 | 只看该作者
ORZ君是神人
;P

点评

讨厌啦~和高手还是有很大差距的……  发表于 2011-8-18 18:49
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
301
在线时间
573 小时
注册时间
2005-10-27
帖子
1164
5
发表于 2011-8-22 21:39:10 | 只看该作者
方便的好东西啊!用这个输入游戏节奏明快多了

点评

你竟然是05年注册的= =  发表于 2011-8-29 13:55
这是你的第666贴  发表于 2011-8-22 21:55
认真地猥琐,猥琐地认真
回复 支持 反对

使用道具 举报

Lv1.梦旅人

雨狸

梦石
0
星屑
48
在线时间
625 小时
注册时间
2011-3-19
帖子
1296
6
发表于 2011-8-22 22:28:42 | 只看该作者
唔,之前还在想这个问题,马上看到了,谢谢~


絀神入化于2011-8-22 22:46补充以下内容:
PM:窗口改一下好一点……

点评

你平常脚本怎么插入的- -  发表于 2011-8-22 22:43
启动的脚本是什么…… ?你正常用事件里面的输入数值好了…… - -  发表于 2011-8-22 22:42
插入到哪里……Main? 然后启动的脚本是什么……  发表于 2011-8-22 22:34
明夕,何夕
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
122
在线时间
47 小时
注册时间
2009-3-14
帖子
18
7
发表于 2011-11-20 20:28:06 | 只看该作者
怎么用啊
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
94
在线时间
191 小时
注册时间
2011-10-12
帖子
320
8
发表于 2012-3-9 23:22:48 | 只看该作者
有木有ACE的?
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
147 小时
注册时间
2013-12-2
帖子
132
9
发表于 2013-12-25 09:18:40 | 只看该作者
修正 bug:屏蔽小键盘光标移动功能。……结果光标还是出现了……而且小键盘上的0无法进行操作
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-1 17:10

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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