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

Project1

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

[讨论] [九靈研究]trigger?press?repeat?区别实验

[复制链接]

Lv1.梦旅人

梦石
0
星屑
49
在线时间
157 小时
注册时间
2013-8-14
帖子
203
跳转到指定楼层
1
发表于 2013-9-7 12:50:32 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
为了区分trigger?、 press?、 repeat?
而写了代码实验







RUBY 代码复制
  1. #=begin
  2. class InputtTest < Window
  3.   def initialize
  4.     super  
  5.     self.windowskin = Bitmap.new("Graphics/Windowskins/001-Blue01")  
  6.     self.width = 640 - 64  
  7.     self.height = 32 * 10  
  8.     self.x = 64 / 2
  9.     self.y = (480 / 2) - ((32 * 10) / 2)  
  10.     self.z = 100   
  11.     self.back_opacity = 128
  12.  
  13.     self.contents = Bitmap.new((640 - 32) - 32, (32 * 10) - 32)
  14.     self.contents.font.name = "黑体"
  15.     self.contents.font.color = Color.new(255, 255, 255, 200)
  16.  
  17.     #先声明实例变量,因为要用到 +=
  18.     #为什么是实例变量?因为在update中依然是实例变量的作用域
  19.     @s0 = 0.0
  20.     @s1 = 0.0
  21.     @s2 = 0.0
  22.     @s3 = 0.0   
  23.     #声明空数组
  24.     @input_type = []
  25.     @text_rect = []
  26.  
  27.     #初始化"判定生成Rect"的旗帜
  28.     @text_rect_flag = false
  29.  
  30.     #loop循环,此为操作阶段(Input.update为实现互动关键)
  31.     loop do
  32.       #前进一帧
  33.       Graphics.update
  34.       #捕捉/侦测/获取,并判断,按下的键及按下的类型,随即记录
  35.       Input.update
  36.       #调用自(重)定义update 方法
  37.       update
  38.     end
  39.   end
  40.  
  41.   #剥离loop循环,可精减loop循环的复杂度
  42.   #方便管理/侦错(也可以塞回去,将update展开,只是loop do...end会变得很庞大)
  43.   def update
  44.  
  45.     #按下C键的trigger?判断(根据Input.update捕捉到的)
  46.     if Input.trigger?(Input::C)
  47.       @s0 += 1
  48.     end
  49.     #按下C键的press?判断(根据Input.update捕捉到的)
  50.     if Input.press?(Input::C)
  51.       @s1 += 1
  52.     end
  53.     #按下C键的repeat?判断(根据Input.update捕捉到的)
  54.     if Input.repeat?(Input::C)
  55.       @s2 += 1
  56.     end
  57.     #press除以repeat,观察两者差异
  58.     @s3 = @s1 / @s2
  59.  
  60.     # += 1 后更新/刷新/再赋值@input_type,获取最新数据,to_s要加
  61.     @input_type = ["trigger\s:\s" + @s0.to_s, "press\s:\s" + @s1.to_s, \
  62.     "repeat\s:\s" + @s2.to_s, "press / repeat\s:\s" + @s3.to_s]
  63.  
  64.     #刷新新数据前,先清空旧资料(contents),以免重叠
  65.     self.contents.clear
  66.     #for循环,执行4次,高效处理更新数据
  67.     for i in [email]0...@input_type.size[/email]
  68.       #判断@text_rect_flag是否为false
  69.       if @text_rect_flag == false  #一开始没放东西,所以旗帜为false(初始值)
  70.         #放入Rect,设定一行放一个,这样就不用再set了
  71.         @text_rect[i] = Rect.new(0, 32 * i, (640 - 32) - 32, 32)
  72.       end  
  73.       #if结束后输出文字
  74.       self.contents.draw_text(@text_rect[i], @input_type[i])   
  75.     end
  76.  
  77.     if @text_rect_flag == false
  78.       #在@text_rect尾部/后面加进一个Rect,用来放dir4
  79.       @text_rect.push(Rect.new(0, 32 * @input_type.size, \
  80.       (640 - 32) - 32, 32))
  81.       #在@text_rect尾部/后面加进一个Rect,用来放dir8
  82.       @text_rect.push(Rect.new(0, 32 * (@input_type.size + 1), \
  83.       (640 - 32) - 32, 32))
  84.     end
  85.  
  86.     #for、if结束后,在确信"放入Rect"后,改为true,之后if就不执行了
  87.     @text_rect_flag = true  
  88.  
  89.     #先画上"dir4 : ",让他一直显示,因为定期clear,所以上下左右只闪一下
  90.     self.contents.draw_text(@text_rect[@input_type.size], "dir4 : ")  
  91.     #若左下、右下、左上、右上时不执行
  92.     unless Input.dir8 == 1 or Input.dir8 == 3 or Input.dir8 == 7 or \
  93.       Input.dir8 == 9
  94.       case Input.dir4
  95.       when 2
  96.         self.contents.draw_text(@text_rect[@input_type.size], "       下")
  97.       when 4
  98.         self.contents.draw_text(@text_rect[@input_type.size], "       左")
  99.       when 6
  100.         self.contents.draw_text(@text_rect[@input_type.size], "       右")
  101.       when 8
  102.         self.contents.draw_text(@text_rect[@input_type.size], "       上")  
  103.       end
  104.     end
  105.  
  106.     self.contents.draw_text(@text_rect[@input_type.size + 1], "dir8 : ")   
  107.     case Input.dir8
  108.     when 1
  109.       self.contents.draw_text(@text_rect[@input_type.size + 1], "       左下")
  110.     when 2
  111.       self.contents.draw_text(@text_rect[@input_type.size + 1], "       下")
  112.     when 3
  113.       self.contents.draw_text(@text_rect[@input_type.size + 1], "       右下")
  114.     when 4
  115.       self.contents.draw_text(@text_rect[@input_type.size + 1], "       左")
  116.     when 6
  117.       self.contents.draw_text(@text_rect[@input_type.size + 1], "       右")
  118.     when 7
  119.       self.contents.draw_text(@text_rect[@input_type.size + 1], "       左上")
  120.     when 8
  121.       self.contents.draw_text(@text_rect[@input_type.size + 1], "       上")
  122.     when 9
  123.       self.contents.draw_text(@text_rect[@input_type.size + 1], "       右上")
  124.     end
  125.   end
  126. end
  127.  
  128. @title_moon = Sprite.new
  129. @title_moon.bitmap = Bitmap.new("Graphics/Titles/001-Title01")
  130. @input_test = InputtTest.new
  131.  
  132. =begin
  133. 以上探讨分析
  134. 实例变量
  135. Input
  136. 旗帜
  137. dir4、dir8
  138. trigger? press? repeat? 之间的关系
  139. =end
  140.  
  141. exit

Lv1.梦旅人

梦石
0
星屑
112
在线时间
551 小时
注册时间
2012-8-18
帖子
1429
2
发表于 2013-9-7 13:00:47 | 只看该作者
这说明了什么……
我要填坑!我要背单词!我要学日语!我要每天锻炼!
好吧呵呵= =
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
49
在线时间
157 小时
注册时间
2013-8-14
帖子
203
3
 楼主| 发表于 2013-9-7 13:34:36 | 只看该作者
无脑之人 发表于 2013-9-7 13:00
这说明了什么……

说明了press / repeat 接近 4
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

梦石
1
星屑
5806
在线时间
2649 小时
注册时间
2013-8-23
帖子
2315

开拓者

4
发表于 2013-9-7 14:14:14 | 只看该作者
这玩意是神马....
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
75
在线时间
40 小时
注册时间
2012-7-3
帖子
98
5
发表于 2013-9-18 09:43:57 | 只看该作者
鼠标拥有两个状态:Down,Up
还有一个Click
这三个消息产生的顺序是Down=>Up=>Click
down=鼠标按下
up=鼠标抬起
click=鼠标完成了一次点击
↑同理可证,键盘的应该差不多。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
76
在线时间
1379 小时
注册时间
2012-7-5
帖子
1698

开拓者

6
发表于 2013-9-19 21:31:30 | 只看该作者
为什么我要来回这个贴,
我发现判断一个键持续按下(比如我要显示几张图实时演出我的操作信息<何弃疗)时用press更好,repeat的使用地方还是比较少的

  -fk: -azogi:
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
49
在线时间
83 小时
注册时间
2008-4-19
帖子
420
7
发表于 2014-5-16 22:48:33 | 只看该作者
吐槽:参见全键盘脚本的key? press?和trigger?
好吧这是II让我贴的- -
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-29 07:11

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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