#=begin
class InputtTest < Window
def initialize
super
self.windowskin = Bitmap.new("Graphics/Windowskins/001-Blue01")
self.width = 640 - 64
self.height = 32 * 10
self.x = 64 / 2
self.y = (480 / 2) - ((32 * 10) / 2)
self.z = 100
self.back_opacity = 128
self.contents = Bitmap.new((640 - 32) - 32, (32 * 10) - 32)
self.contents.font.name = "黑体"
self.contents.font.color = Color.new(255, 255, 255, 200)
#先声明实例变量,因为要用到 +=
#为什么是实例变量?因为在update中依然是实例变量的作用域
@s0 = 0.0
@s1 = 0.0
@s2 = 0.0
@s3 = 0.0
#声明空数组
@input_type = []
@text_rect = []
#初始化"判定生成Rect"的旗帜
@text_rect_flag = false
#loop循环,此为操作阶段(Input.update为实现互动关键)
loop do
#前进一帧
Graphics.update
#捕捉/侦测/获取,并判断,按下的键及按下的类型,随即记录
Input.update
#调用自(重)定义update 方法
update
end
end
#剥离loop循环,可精减loop循环的复杂度
#方便管理/侦错(也可以塞回去,将update展开,只是loop do...end会变得很庞大)
def update
#按下C键的trigger?判断(根据Input.update捕捉到的)
if Input.trigger?(Input::C)
@s0 += 1
end
#按下C键的press?判断(根据Input.update捕捉到的)
if Input.press?(Input::C)
@s1 += 1
end
#按下C键的repeat?判断(根据Input.update捕捉到的)
if Input.repeat?(Input::C)
@s2 += 1
end
#press除以repeat,观察两者差异
@s3 = @s1 / @s2
# += 1 后更新/刷新/再赋值@input_type,获取最新数据,to_s要加
@input_type = ["trigger\s:\s" + @s0.to_s, "press\s:\s" + @s1.to_s, \
"repeat\s:\s" + @s2.to_s, "press / repeat\s:\s" + @s3.to_s]
#刷新新数据前,先清空旧资料(contents),以免重叠
self.contents.clear
#for循环,执行4次,高效处理更新数据
for i in [email]0...@input_type.size[/email]
#判断@text_rect_flag是否为false
if @text_rect_flag == false #一开始没放东西,所以旗帜为false(初始值)
#放入Rect,设定一行放一个,这样就不用再set了
@text_rect[i] = Rect.new(0, 32 * i, (640 - 32) - 32, 32)
end
#if结束后输出文字
self.contents.draw_text(@text_rect[i], @input_type[i])
end
if @text_rect_flag == false
#在@text_rect尾部/后面加进一个Rect,用来放dir4
@text_rect.push(Rect.new(0, 32 * @input_type.size, \
(640 - 32) - 32, 32))
#在@text_rect尾部/后面加进一个Rect,用来放dir8
@text_rect.push(Rect.new(0, 32 * (@input_type.size + 1), \
(640 - 32) - 32, 32))
end
#for、if结束后,在确信"放入Rect"后,改为true,之后if就不执行了
@text_rect_flag = true
#先画上"dir4 : ",让他一直显示,因为定期clear,所以上下左右只闪一下
self.contents.draw_text(@text_rect[@input_type.size], "dir4 : ")
#若左下、右下、左上、右上时不执行
unless Input.dir8 == 1 or Input.dir8 == 3 or Input.dir8 == 7 or \
Input.dir8 == 9
case Input.dir4
when 2
self.contents.draw_text(@text_rect[@input_type.size], " 下")
when 4
self.contents.draw_text(@text_rect[@input_type.size], " 左")
when 6
self.contents.draw_text(@text_rect[@input_type.size], " 右")
when 8
self.contents.draw_text(@text_rect[@input_type.size], " 上")
end
end
self.contents.draw_text(@text_rect[@input_type.size + 1], "dir8 : ")
case Input.dir8
when 1
self.contents.draw_text(@text_rect[@input_type.size + 1], " 左下")
when 2
self.contents.draw_text(@text_rect[@input_type.size + 1], " 下")
when 3
self.contents.draw_text(@text_rect[@input_type.size + 1], " 右下")
when 4
self.contents.draw_text(@text_rect[@input_type.size + 1], " 左")
when 6
self.contents.draw_text(@text_rect[@input_type.size + 1], " 右")
when 7
self.contents.draw_text(@text_rect[@input_type.size + 1], " 左上")
when 8
self.contents.draw_text(@text_rect[@input_type.size + 1], " 上")
when 9
self.contents.draw_text(@text_rect[@input_type.size + 1], " 右上")
end
end
end
@title_moon = Sprite.new
@title_moon.bitmap = Bitmap.new("Graphics/Titles/001-Title01")
@input_test = InputtTest.new
=begin
以上探讨分析
实例变量
Input
旗帜
dir4、dir8
trigger? press? repeat? 之间的关系
=end
exit