cyross-ruby-miyako 2.0.5.1 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. data/README +1092 -929
  2. data/Rakefile +7 -7
  3. data/defines.h +144 -144
  4. data/extern.h +29 -29
  5. data/install_miyako.rb +87 -87
  6. data/lib/Miyako/API/audio.rb +572 -198
  7. data/lib/Miyako/API/basic_data.rb +825 -573
  8. data/lib/Miyako/API/bitmap.rb +534 -507
  9. data/lib/Miyako/API/choices.rb +481 -475
  10. data/lib/Miyako/API/collision.rb +486 -460
  11. data/lib/Miyako/API/diagram.rb +586 -561
  12. data/lib/Miyako/API/drawing.rb +151 -151
  13. data/lib/Miyako/API/exceptions.rb +105 -0
  14. data/lib/Miyako/API/fixedmap.rb +462 -428
  15. data/lib/Miyako/API/font.rb +430 -403
  16. data/lib/Miyako/API/input.rb +456 -447
  17. data/lib/Miyako/API/layout.rb +636 -433
  18. data/lib/Miyako/API/map.rb +583 -529
  19. data/lib/Miyako/API/map_event.rb +222 -198
  20. data/lib/Miyako/API/modules.rb +357 -109
  21. data/lib/Miyako/API/movie.rb +166 -154
  22. data/lib/Miyako/API/parts.rb +276 -189
  23. data/lib/Miyako/API/plane.rb +205 -166
  24. data/lib/Miyako/API/screen.rb +341 -325
  25. data/lib/Miyako/API/shape.rb +443 -443
  26. data/lib/Miyako/API/sprite.rb +771 -752
  27. data/lib/Miyako/API/sprite_animation.rb +490 -481
  28. data/lib/Miyako/API/sprite_list.rb +1135 -0
  29. data/lib/Miyako/API/spriteunit.rb +168 -147
  30. data/lib/Miyako/API/story.rb +350 -300
  31. data/lib/Miyako/API/textbox.rb +770 -725
  32. data/lib/Miyako/API/utility.rb +419 -388
  33. data/lib/Miyako/API/viewport.rb +189 -139
  34. data/lib/Miyako/API/yuki.rb +1226 -996
  35. data/lib/Miyako/EXT/miyako_cairo.rb +62 -62
  36. data/lib/Miyako/EXT/raster_scroll.rb +138 -138
  37. data/lib/Miyako/EXT/slides.rb +157 -157
  38. data/lib/Miyako/miyako.rb +201 -171
  39. data/lib/Miyako/miyako_require_only.rb +35 -0
  40. data/miyako_basicdata.c +590 -590
  41. data/miyako_bitmap.c +1225 -1225
  42. data/miyako_collision.c +403 -403
  43. data/miyako_drawing.c +187 -187
  44. data/miyako_font.c +334 -334
  45. data/miyako_hsv.c +830 -830
  46. data/miyako_input_audio.c +254 -0
  47. data/miyako_layout.c +191 -191
  48. data/miyako_no_katana.c +1078 -1074
  49. data/miyako_sprite2.c +431 -0
  50. data/miyako_transform.c +438 -438
  51. data/miyako_utility.c +288 -288
  52. data/sample/Animation1/m1ku.rb +68 -68
  53. data/sample/Animation2/lex.rb +96 -96
  54. data/sample/Diagram_sample/diagram_sample_yuki2.rb +328 -386
  55. data/sample/Room3/blue.rb +297 -297
  56. data/sample/Room3/ending.rb +180 -180
  57. data/sample/Room3/green.rb +220 -220
  58. data/sample/Room3/main.rb +119 -119
  59. data/sample/Room3/main_component.rb +59 -59
  60. data/sample/Room3/red.rb +227 -227
  61. data/sample/Room3/room3.rb +25 -27
  62. data/sample/Room3/title.rb +184 -184
  63. data/sample/ball_action_sample.rb +204 -204
  64. data/sample/blit_rop.rb +70 -70
  65. data/sample/cairo_sample.rb +25 -25
  66. data/sample/circle_collision_test.rb +66 -66
  67. data/sample/collision_test.rb +33 -33
  68. data/sample/collision_test2.rb +108 -108
  69. data/sample/fixed_map_test/fixed_map_sample.rb +140 -140
  70. data/sample/fixed_map_test/readme.txt +72 -72
  71. data/sample/map_test/chara.rb +58 -58
  72. data/sample/map_test/main_parts.rb +69 -69
  73. data/sample/map_test/main_scene.rb +153 -153
  74. data/sample/map_test/map_manager.rb +75 -75
  75. data/sample/map_test/map_test.rb +23 -23
  76. data/sample/map_test/oasis.rb +71 -71
  77. data/sample/map_test/readme.txt +89 -89
  78. data/sample/map_test/route.rb +157 -157
  79. data/sample/map_test/town.rb +74 -74
  80. data/sample/polygon_test.rb +35 -35
  81. data/sample/rasterscroll.rb +24 -24
  82. data/sample/takahashi.rb +42 -42
  83. data/sample/textbox_sample.rb +189 -189
  84. data/sample/transform.rb +54 -54
  85. data/sample/utility_test.rb +73 -73
  86. data/sample/utility_test2.rb +61 -61
  87. data/sample/utility_test3.rb +64 -64
  88. data/sample/utility_test4.rb +73 -73
  89. data/uninstall_miyako.rb +19 -19
  90. data/win/miyako_no_katana.so +0 -0
  91. metadata +7 -2
@@ -1,74 +1,74 @@
1
- # -*- encoding: utf-8 -*-
2
- #街を表すイベントクラス
3
- class EventTown
4
- include MapEvent
5
-
6
- attr_reader :margin
7
-
8
- def init(map, x, y)
9
- # イベント用チップを取得
10
- @spr = Sprite.new({:filename => "map2.png", :type => :color_key})
11
- @spr.ox = @spr.oy = @spr.ow = @spr.oh = 32
12
- @spr.move_to(x, y)
13
- @coll = Collision.new([0, 0, @spr.ow, @spr.oh])
14
- @pos = Point.new(x, y)
15
- @margin = Size.new(0, 0)
16
- @parts = CommonParts.instance
17
- @yuki = Yuki.new
18
- @yuki.select_textbox(@parts.box[:box])
19
- end
20
-
21
- # キャラの立ち位置とイベントの位置が重なり合っているかの判別
22
- def met?(param = nil)
23
- return @coll.collision?(@pos, param[:collision], param[:pos])
24
- end
25
-
26
- # イベントの開始
27
- def start(param = nil)
28
- @yuki.start_plot(plot)
29
- end
30
-
31
- def executing?
32
- @yuki.executing?
33
- end
34
-
35
- # イベントの実行
36
- def plot
37
- yuki_plot do
38
- text " ここが"
39
- color([255,200,200]){"グリージアの街"}
40
- text "か・・・。"
41
- cr
42
- text " まぁ、入るつもりは無いが。"
43
- pause
44
- clear
45
- end
46
- end
47
-
48
- def move(dx, dy)
49
- @spr.move(-dx, -dy)
50
- end
51
-
52
- def move_to(x, y)
53
- @spr.move_to(x, y)
54
- end
55
-
56
- def update(map_obj, events, params)
57
- if @yuki.executing?
58
- @yuki.update
59
- @parts.box.update_animation
60
- end
61
- end
62
-
63
- # イベントキャラクタの描画
64
- def render
65
- @spr.move(-@margin.w, -@margin.h)
66
- @spr.render
67
- @spr.move(@margin.w, @margin.h)
68
- end
69
-
70
- #(Yuki起動時)メッセージボックスの表示
71
- def render_box
72
- @parts.box.render if @yuki.executing?
73
- end
74
- end
1
+ # -*- encoding: utf-8 -*-
2
+ #街を表すイベントクラス
3
+ class EventTown
4
+ include MapEvent
5
+
6
+ attr_reader :margin
7
+
8
+ def init(map, x, y)
9
+ # イベント用チップを取得
10
+ @spr = Sprite.new({:filename => "map2.png", :type => :color_key})
11
+ @spr.ox = @spr.oy = @spr.ow = @spr.oh = 32
12
+ @spr.move_to!(x, y)
13
+ @coll = Collision.new([0, 0, @spr.ow, @spr.oh])
14
+ @pos = Point.new(x, y)
15
+ @margin = Size.new(0, 0)
16
+ @parts = CommonParts.instance
17
+ @yuki = Yuki.new
18
+ @yuki.select_textbox(@parts.box[:box])
19
+ end
20
+
21
+ # キャラの立ち位置とイベントの位置が重なり合っているかの判別
22
+ def met?(param = nil)
23
+ return @coll.collision?(@pos, param[:collision], param[:pos])
24
+ end
25
+
26
+ # イベントの開始
27
+ def start(param = nil)
28
+ @yuki.start_plot(plot)
29
+ end
30
+
31
+ def executing?
32
+ @yuki.executing?
33
+ end
34
+
35
+ # イベントの実行
36
+ def plot
37
+ yuki_plot do
38
+ text " ここが"
39
+ color([255,200,200]){"グリージアの街"}
40
+ text "か・・・。"
41
+ cr
42
+ text " まぁ、入るつもりは無いが。"
43
+ pause
44
+ clear
45
+ end
46
+ end
47
+
48
+ def move!(dx, dy)
49
+ @spr.move!(-dx, -dy)
50
+ end
51
+
52
+ def move_to!(x, y)
53
+ @spr.move_to!(x, y)
54
+ end
55
+
56
+ def update(map_obj, events, params)
57
+ if @yuki.executing?
58
+ @yuki.update
59
+ @parts.box.update_animation
60
+ end
61
+ end
62
+
63
+ # イベントキャラクタの描画
64
+ def render
65
+ @spr.move!(-@margin.w, -@margin.h)
66
+ @spr.render
67
+ @spr.move!(@margin.w, @margin.h)
68
+ end
69
+
70
+ #(Yuki起動時)メッセージボックスの表示
71
+ def render_box
72
+ @parts.box.render if @yuki.executing?
73
+ end
74
+ end
@@ -1,35 +1,35 @@
1
- # Drawing.polygonサンプル
2
- # 2009.4.12 Cyross Makoto
3
-
4
- require 'Miyako/miyako'
5
-
6
- max_vertexes = 32 # 最大頂点数
7
-
8
- # 設定配列(Enumerator)
9
- flags = [[true, true], # 塗りつぶし、アンチエイリアス有り
10
- [true], # 塗りつぶし
11
- [false, true], # 線描、アンチエイリアス有り
12
- [false] # 線描
13
- ].cycle
14
-
15
- # 色配列(Enumerator)
16
- colors = [[0,0,255], # 青色
17
- [0,255,0], # 緑色
18
- [0,255,255], # 水色
19
- [255,0,0], # 赤色
20
- [255,0,255], # 紫色
21
- [255,255,0], # 黄色
22
- [255,255,255] # 白色
23
- ].cycle
24
-
25
- loop do
26
- Miyako::Input.update
27
- break if Miyako::Input.quit_or_escape?
28
- # 3 ~ max_vertexes までのランダム個数の頂点を作成
29
- pairs = Array.new(rand(max_vertexes - 3) + 3){
30
- [rand(Miyako::Screen.w), rand(Miyako::Screen.h)]
31
- }
32
- # 多角形を描画
33
- Miyako::Drawing.polygon(Miyako::Screen, pairs, colors.next, *(flags.next))
34
- Miyako::Screen.render
35
- end
1
+ # Drawing.polygonサンプル
2
+ # 2009.4.12 Cyross Makoto
3
+
4
+ require 'Miyako/miyako'
5
+
6
+ max_vertexes = 32 # 最大頂点数
7
+
8
+ # 設定配列(Enumerator)
9
+ flags = [[true, true], # 塗りつぶし、アンチエイリアス有り
10
+ [true], # 塗りつぶし
11
+ [false, true], # 線描、アンチエイリアス有り
12
+ [false] # 線描
13
+ ].cycle
14
+
15
+ # 色配列(Enumerator)
16
+ colors = [[0,0,255], # 青色
17
+ [0,255,0], # 緑色
18
+ [0,255,255], # 水色
19
+ [255,0,0], # 赤色
20
+ [255,0,255], # 紫色
21
+ [255,255,0], # 黄色
22
+ [255,255,255] # 白色
23
+ ].cycle
24
+
25
+ loop do
26
+ Miyako::Input.update
27
+ break if Miyako::Input.quit_or_escape?
28
+ # 3 ~ max_vertexes までのランダム個数の頂点を作成
29
+ pairs = Array.new(rand(max_vertexes - 3) + 3){
30
+ [rand(Miyako::Screen.w), rand(Miyako::Screen.h)]
31
+ }
32
+ # 多角形を描画
33
+ Miyako::Drawing.polygon(Miyako::Screen, pairs, colors.next, *(flags.next))
34
+ Miyako::Screen.render
35
+ end
@@ -1,25 +1,25 @@
1
- # encoding: utf-8
2
- # ���X�^�X�N���[���T���v��
3
- # 2009.4.12 Cyross Makoto
4
-
5
- require 'Miyako/miyako'
6
- require 'Miyako/EXT/raster_scroll'
7
-
8
- include Miyako
9
-
10
- #1�b��Ƀ��X�^�X�N���[���̃t�F�[�h�A�E�g��ݒ肷��
11
- wait = WaitCounter.new(1.0).start
12
- # 0.05�b���ƂɁA2���C�����A8�s�N�Z���P�ʂ̃��X�^�X�N���[�����s��
13
- sprite = Sprite.new(:file => "Animation2/lex_body.png", :type => :ck).centering
14
- rs = RasterScroll.new(sprite).start({:lines => 2, :size => 8, :wait=>WaitCounter.new(0.05)})
15
- fade = false
16
-
17
- Miyako.main_loop do
18
- break if Input.quit_or_escape?
19
- rs.effecting? ? rs.update.render : sprite.render
20
- if fade == false && wait.finish?
21
- #1�b�ゲ�ƂɁA���X�^�X�N���[���̕����k�߂�
22
- rs.fade_out(1, WaitCounter.new(1.0))
23
- fade = true
24
- end
1
+ # encoding: utf-8
2
+ # ���X�^�X�N���[���T���v��
3
+ # 2009.4.12 Cyross Makoto
4
+
5
+ require 'Miyako/miyako'
6
+ require 'Miyako/EXT/raster_scroll'
7
+
8
+ include Miyako
9
+
10
+ #1�b��Ƀ��X�^�X�N���[���̃t�F�[�h�A�E�g��ݒ肷��
11
+ wait = WaitCounter.new(1.0).start
12
+ # 0.05�b���ƂɁA2���C�����A8�s�N�Z���P�ʂ̃��X�^�X�N���[�����s��
13
+ sprite = Sprite.new(:file => "Animation2/lex_body.png", :type => :ck).centering!
14
+ rs = RasterScroll.new(sprite).start({:lines => 2, :size => 8, :wait=>WaitCounter.new(0.05)})
15
+ fade = false
16
+
17
+ Miyako.main_loop do
18
+ break if Input.quit_or_escape?
19
+ rs.effecting? ? rs.update.render : sprite.render
20
+ if fade == false && wait.finish?
21
+ #1�b�ゲ�ƂɁA���X�^�X�N���[���̕����k�߂�
22
+ rs.fade_out(1, WaitCounter.new(1.0))
23
+ fade = true
24
+ end
25
25
  end
data/sample/takahashi.rb CHANGED
@@ -1,42 +1,42 @@
1
- # -*- encoding: utf-8 -*-
2
- # テキスト表示・高橋メソッド形式サンプル
3
- # 2009.4.12 Cyross Makoto
4
-
5
- require 'Miyako/miyako'
6
-
7
- include Miyako
8
-
9
- # 高橋メソッド形式文字列の表示
10
- shape1 = Shape.takahashi(:font=>Font.serif, :align=>:center, :valign=>:bottom, :size=>Screen.size){|v|
11
- size(20){ text "えーびーしー" }
12
- cr
13
- text "ABC"
14
- cr
15
- under_line{"でー"} . text("えーえふじー")
16
- cr
17
- text("DEFG")
18
- }
19
-
20
- # 通常形式で表示
21
- shape2 = Shape.text(:font=>Font.serif, :align=>:right){|v|
22
- size(24){
23
- text "えー"
24
- color(:yellow){ "びー" }
25
- text "しー"
26
- }
27
- cr
28
- text "ABC"
29
- cr
30
- under_line{"でー"} . text("えーえふじー")
31
- cr
32
- text("DEFG")
33
- }
34
-
35
- # 自動描画配列にshape1、shape2を組み込み
36
- Screen.auto_render_array << shape1
37
- Screen.auto_render_array << shape2
38
-
39
- Miyako.main_loop do
40
- break if Input.quit_or_escape?
41
- Drawing.fill(Screen, [100,100,100])
42
- end
1
+ # -*- encoding: utf-8 -*-
2
+ # テキスト表示・高橋メソッド形式サンプル
3
+ # 2009.4.12 Cyross Makoto
4
+
5
+ require 'Miyako/miyako'
6
+
7
+ include Miyako
8
+
9
+ # 高橋メソッド形式文字列の表示
10
+ shape1 = Shape.takahashi(:font=>Font.serif, :align=>:center, :valign=>:bottom, :size=>Screen.size){|v|
11
+ size(20){ text "えーびーしー" }
12
+ cr
13
+ text "ABC"
14
+ cr
15
+ under_line{"でー"} . text("えーえふじー")
16
+ cr
17
+ text("DEFG")
18
+ }
19
+
20
+ # 通常形式で表示
21
+ shape2 = Shape.text(:font=>Font.serif, :align=>:right){|v|
22
+ size(24){
23
+ text "えー"
24
+ color(:yellow){ "びー" }
25
+ text "しー"
26
+ }
27
+ cr
28
+ text "ABC"
29
+ cr
30
+ under_line{"でー"} . text("えーえふじー")
31
+ cr
32
+ text("DEFG")
33
+ }
34
+
35
+ # 自動描画配列にshape1、shape2を組み込み
36
+ Screen.auto_render_array << shape1
37
+ Screen.auto_render_array << shape2
38
+
39
+ Miyako.main_loop do
40
+ break if Input.quit_or_escape?
41
+ Drawing.fill(Screen, [100,100,100])
42
+ end
@@ -1,190 +1,190 @@
1
- #encoding: utf-8
2
- #テキストボックス サンプル
3
- #2009 Cyross Makoto
4
-
5
- require 'Miyako/miyako'
6
-
7
- include Miyako
8
-
9
- TEXTBOX_MARGIN = 16
10
-
11
- # pause用カーソルの用意
12
- ws = Sprite.new(:file=>"../img/wait_cursor.png", :type=>:ac)
13
- ws.oh = ws.ow
14
- @ws = SpriteAnimation.new(:sprite=>ws, :wait=>0.2, :pattern_list=>[0,1,2,3,2,1])
15
-
16
- # 選択用カーソルの用意
17
- cs = Sprite.new(:file=>"../img/cursor.png", :type=>:ac)
18
- cs.oh = cs.ow
19
- @cs = SpriteAnimation.new(:sprite=>cs, :wait=>0.2, :pattern_list=>[0,1,2,3,2,1])
20
-
21
- # フォントの用意
22
- font = Font.sans_serif
23
- font.color = Color[:white]
24
- font.size = 16
25
-
26
- # テキストボックスの用意
27
- box = TextBox.new(:size=>[32,20], :wait_cursor => @ws, :select_cursor => @cs, :font => font)
28
-
29
- # テキストボックス背景の用意
30
- box_bg = Sprite.new(:size => box.size.to_a.map{|v| v + TEXTBOX_MARGIN}, :type => :ac)
31
- box_bg.fill([128,0,64,128])
32
-
33
- # Partsをまとめて一つのボックスにする
34
- @parts = Parts.new(box.size)
35
- @parts[:box_bg] = box_bg
36
- @parts[:box] = box
37
- @parts[:box_bg].centering
38
- @parts[:box].centering
39
- @parts.centering
40
-
41
- # 選択肢の作成
42
- list = [
43
- [Shape.text(:font=>font, :text=>"選択肢1"), nil, 1],
44
- [Shape.text(:font=>font, :text=>"選択肢2"), nil, 2],
45
- [Shape.text(:font=>font, :text=>"選択肢3"), nil, 3]
46
- ]
47
- @choices = @parts[:box].create_choices_chain(list)
48
-
49
- # カーソルのアニメーションの開始
50
- @parts[:box].start
51
-
52
- # 実行させる処理をテキストボックスに登録
53
- @parts[:box].execute(@choices){|box, params|
54
- box.draw_text "やあ。"
55
- box.pause.cr
56
-
57
- box.draw_text "Miyakoのテキストボックスサンプルにようこそ。"
58
- box.pause.cr
59
-
60
- box.draw_text "ここでは、テキストボックスの機能をいくつか例示してみます。"
61
- box.pause.clear
62
-
63
- box.draw_text "まず、"
64
- box.pause.cr
65
-
66
- box.font_size_during(24){ box.draw_text "文字の大きさを変えます。" }
67
- box.pause.cr
68
-
69
- box.draw_text "変わりましたね?"
70
- box.pause.clear
71
-
72
- box.draw_text "次に、"
73
- box.pause.cr
74
-
75
- box.color_during(:blue){ box.draw_text "文字の色を変えてみます。" }
76
- box.pause.cr
77
-
78
- box.draw_text "変わりましたね?"
79
- box.pause.clear
80
-
81
- box.draw_text "続いて、"
82
- box.pause.cr
83
-
84
- box.font_size_during(24){
85
- box.color_during(:blue){
86
- box.draw_text "文字の大きさを変えながら"
87
- box.cr
88
- box.draw_text "色を変えてみます。"
89
- }
90
- }
91
- box.pause.cr
92
-
93
- box.draw_text "ほら、簡単でしょ?"
94
- box.pause.clear
95
-
96
- box.draw_text "文字の修飾も出来ます。"
97
- box.pause.cr
98
-
99
- box.font_bold{ box.draw_text "ボールド体でも" }
100
- box.pause.cr
101
-
102
- box.font_italic{ box.draw_text "イタリック体でも(フォントによって可・不可あるかも)" }
103
- box.pause.cr
104
-
105
- box.font_under_line{ box.draw_text "下線付きでも" }
106
- box.pause.cr
107
-
108
- box.draw_text "OKです"
109
- box.pause.clear
110
-
111
- box.draw_text "文字の位置を変更してみましょう。"
112
- box.pause.cr
113
-
114
- box.draw_text "一番左に表示しています"
115
- box.cr
116
-
117
- text = "真ん中に表示しています"
118
- # 文字列の長さ(ピクセル単位)を取得
119
- len = box.font.text_size(text)[0]
120
- # x座標の位置を変更
121
- box.locate.x = (box.size.w-len)/2
122
- box.draw_text text
123
- box.cr
124
-
125
- text = "右に表示しています"
126
- # 文字列の長さ(ピクセル単位)を取得
127
- len = box.font.text_size(text)[0]
128
- # x座標の位置を変更
129
- box.locate.x = (box.size.w-len)
130
- box.draw_text text
131
- box.cr
132
-
133
- text = "一番下の真ん中に表示しています"
134
- # 文字列の長さ(ピクセル単位)を取得
135
- len = box.font.text_size(text)
136
- # x座標の位置を変更
137
- box.locate.x = (box.size.w-len[0])/2
138
- box.locate.y = (box.size.h-len[1])
139
- box.draw_text text
140
- box.cr
141
-
142
- box.pause.clear
143
-
144
- box.draw_text "最後に、選択肢を表示させてみます"
145
- box.pause.cr
146
-
147
- # params[0] == @choices
148
- box.command params[0]
149
-
150
- box.draw_text "選択結果は#{box.result}ですね。"
151
- box.pause.cr.cr
152
-
153
- box.draw_text "だいたい、テキストボックスの使い方が"
154
- box.cr
155
-
156
- box.draw_text "おわかりになりましたでしょうか?"
157
- box.pause.cr
158
-
159
- box.draw_text "それでは、そろそろ失礼いたします・・・。"
160
- box.pause.cr
161
- }
162
-
163
- # テキストボックスのまとめ処理
164
- def process_textbox
165
- @parts[:box].update_animation
166
- @parts.render
167
- end
168
-
169
- Miyako.main_loop do
170
- break if Input.quit_or_escape? || !@parts[:box].execute?
171
- # テキストボックスはポーズ中?
172
- # ポーズ中はupdateを呼んではいけないので、ポーズ中は直前で回避している
173
- if @parts[:box].pause?
174
- # 1ボタンを押したとき、ポーズを解除する
175
- @parts[:box].release if Input.pushed_any?(:btn1)
176
- process_textbox
177
- next
178
- end
179
- # テキストボックスはコマンド選択中?
180
- if @parts[:box].selecting?
181
- # カーソルの移動
182
- @parts[:box].move_cursor(*Input.pushed_amount)
183
- # 1ボタンを押したとき、選択状態を解除する
184
- @parts[:box].finish_command if Input.pushed_any?(:btn1)
185
- process_textbox
186
- next
187
- end
188
- @parts[:box].update
189
- process_textbox
1
+ #encoding: utf-8
2
+ #テキストボックス サンプル
3
+ #2009 Cyross Makoto
4
+
5
+ require 'Miyako/miyako'
6
+
7
+ include Miyako
8
+
9
+ TEXTBOX_MARGIN = 16
10
+
11
+ # pause用カーソルの用意
12
+ ws = Sprite.new(:file=>"../img/wait_cursor.png", :type=>:ac)
13
+ ws.oh = ws.ow
14
+ @ws = SpriteAnimation.new(:sprite=>ws, :wait=>0.2, :pattern_list=>[0,1,2,3,2,1])
15
+
16
+ # 選択用カーソルの用意
17
+ cs = Sprite.new(:file=>"../img/cursor.png", :type=>:ac)
18
+ cs.oh = cs.ow
19
+ @cs = SpriteAnimation.new(:sprite=>cs, :wait=>0.2, :pattern_list=>[0,1,2,3,2,1])
20
+
21
+ # フォントの用意
22
+ font = Font.sans_serif
23
+ font.color = Color[:white]
24
+ font.size = 16
25
+
26
+ # テキストボックスの用意
27
+ box = TextBox.new(:size=>[32,20], :wait_cursor => @ws, :select_cursor => @cs, :font => font)
28
+
29
+ # テキストボックス背景の用意
30
+ box_bg = Sprite.new(:size => box.size.to_a.map{|v| v + TEXTBOX_MARGIN}, :type => :ac)
31
+ box_bg.fill([128,0,64,128])
32
+
33
+ # Partsをまとめて一つのボックスにする
34
+ @parts = Parts.new(box.size)
35
+ @parts[:box_bg] = box_bg
36
+ @parts[:box] = box
37
+ @parts[:box_bg].centering!
38
+ @parts[:box].centering!
39
+ @parts.centering!
40
+
41
+ # 選択肢の作成
42
+ list = [
43
+ [Shape.text(:font=>font, :text=>"選択肢1"), nil, 1],
44
+ [Shape.text(:font=>font, :text=>"選択肢2"), nil, 2],
45
+ [Shape.text(:font=>font, :text=>"選択肢3"), nil, 3]
46
+ ]
47
+ @choices = @parts[:box].create_choices_chain(list)
48
+
49
+ # カーソルのアニメーションの開始
50
+ @parts[:box].start
51
+
52
+ # 実行させる処理をテキストボックスに登録
53
+ @parts[:box].execute(@choices){|box, params|
54
+ box.draw_text "やあ。"
55
+ box.pause.cr
56
+
57
+ box.draw_text "Miyakoのテキストボックスサンプルにようこそ。"
58
+ box.pause.cr
59
+
60
+ box.draw_text "ここでは、テキストボックスの機能をいくつか例示してみます。"
61
+ box.pause.clear
62
+
63
+ box.draw_text "まず、"
64
+ box.pause.cr
65
+
66
+ box.font_size_during(24){ box.draw_text "文字の大きさを変えます。" }
67
+ box.pause.cr
68
+
69
+ box.draw_text "変わりましたね?"
70
+ box.pause.clear
71
+
72
+ box.draw_text "次に、"
73
+ box.pause.cr
74
+
75
+ box.color_during(:blue){ box.draw_text "文字の色を変えてみます。" }
76
+ box.pause.cr
77
+
78
+ box.draw_text "変わりましたね?"
79
+ box.pause.clear
80
+
81
+ box.draw_text "続いて、"
82
+ box.pause.cr
83
+
84
+ box.font_size_during(24){
85
+ box.color_during(:blue){
86
+ box.draw_text "文字の大きさを変えながら"
87
+ box.cr
88
+ box.draw_text "色を変えてみます。"
89
+ }
90
+ }
91
+ box.pause.cr
92
+
93
+ box.draw_text "ほら、簡単でしょ?"
94
+ box.pause.clear
95
+
96
+ box.draw_text "文字の修飾も出来ます。"
97
+ box.pause.cr
98
+
99
+ box.font_bold{ box.draw_text "ボールド体でも" }
100
+ box.pause.cr
101
+
102
+ box.font_italic{ box.draw_text "イタリック体でも(フォントによって可・不可あるかも)" }
103
+ box.pause.cr
104
+
105
+ box.font_under_line{ box.draw_text "下線付きでも" }
106
+ box.pause.cr
107
+
108
+ box.draw_text "OKです"
109
+ box.pause.clear
110
+
111
+ box.draw_text "文字の位置を変更してみましょう。"
112
+ box.pause.cr
113
+
114
+ box.draw_text "一番左に表示しています"
115
+ box.cr
116
+
117
+ text = "真ん中に表示しています"
118
+ # 文字列の長さ(ピクセル単位)を取得
119
+ len = box.font.text_size(text)[0]
120
+ # x座標の位置を変更
121
+ box.locate.x = (box.size.w-len)/2
122
+ box.draw_text text
123
+ box.cr
124
+
125
+ text = "右に表示しています"
126
+ # 文字列の長さ(ピクセル単位)を取得
127
+ len = box.font.text_size(text)[0]
128
+ # x座標の位置を変更
129
+ box.locate.x = (box.size.w-len)
130
+ box.draw_text text
131
+ box.cr
132
+
133
+ text = "一番下の真ん中に表示しています"
134
+ # 文字列の長さ(ピクセル単位)を取得
135
+ len = box.font.text_size(text)
136
+ # x座標の位置を変更
137
+ box.locate.x = (box.size.w-len[0])/2
138
+ box.locate.y = (box.size.h-len[1])
139
+ box.draw_text text
140
+ box.cr
141
+
142
+ box.pause.clear
143
+
144
+ box.draw_text "最後に、選択肢を表示させてみます"
145
+ box.pause.cr
146
+
147
+ # params[0] == @choices
148
+ box.command params[0]
149
+
150
+ box.draw_text "選択結果は#{box.result}ですね。"
151
+ box.pause.cr.cr
152
+
153
+ box.draw_text "だいたい、テキストボックスの使い方が"
154
+ box.cr
155
+
156
+ box.draw_text "おわかりになりましたでしょうか?"
157
+ box.pause.cr
158
+
159
+ box.draw_text "それでは、そろそろ失礼いたします・・・。"
160
+ box.pause.cr
161
+ }
162
+
163
+ # テキストボックスのまとめ処理
164
+ def process_textbox
165
+ @parts[:box].update_animation
166
+ @parts.render
167
+ end
168
+
169
+ Miyako.main_loop do
170
+ break if Input.quit_or_escape? || !@parts[:box].execute?
171
+ # テキストボックスはポーズ中?
172
+ # ポーズ中はupdateを呼んではいけないので、ポーズ中は直前で回避している
173
+ if @parts[:box].pause?
174
+ # 1ボタンを押したとき、ポーズを解除する
175
+ @parts[:box].release if Input.pushed_any?(:btn1)
176
+ process_textbox
177
+ next
178
+ end
179
+ # テキストボックスはコマンド選択中?
180
+ if @parts[:box].selecting?
181
+ # カーソルの移動
182
+ @parts[:box].move_cursor(*Input.pushed_amount)
183
+ # 1ボタンを押したとき、選択状態を解除する
184
+ @parts[:box].finish_command if Input.pushed_any?(:btn1)
185
+ process_textbox
186
+ next
187
+ end
188
+ @parts[:box].update
189
+ process_textbox
190
190
  end